ข้อผิดพลาด "รหัสผ่านว่างเปล่า" เมื่อใช้ป้อนอัตโนมัติใน Chrome


10

เมื่อฉันเปิดหน้าจอเข้าสู่ระบบบน Chrome เบราว์เซอร์จะกรอกแบบฟอร์มโดยอัตโนมัติด้วยชื่อผู้ใช้และรหัสผ่านของฉัน อย่างไรก็ตามเมื่อฉันกดปุ่มส่งฉันจะได้รับข้อความต่อไปนี้:

ข้อผิดพลาด: ฟิลด์รหัสผ่านว่างเปล่า

การเพิ่มช่องว่างในรหัสผ่านที่ป้อนอัตโนมัติและลบออกอีกครั้งจะทำให้ฉันเข้าสู่ระบบเกิดอะไรขึ้น

คำตอบ:


15

ฟังก์ชัน JavaScript wp_attempt_focusทำให้เกิดปัญหานี้ ฟังก์ชั่นเริ่มทำงานหลังจากโหลดหน้าไม่นานให้ล้างแบบฟอร์มและมุ่งเน้นไปที่บังคับให้ผู้ใช้ป้อนข้อมูลการเข้าสู่ระบบด้วยตนเอง

Chrome กำลังกรอกชื่อผู้ใช้และรหัสผ่านโดยอัตโนมัติเพียงมิลลิวินาทีก่อนที่ฟังก์ชัน JS จะล้างฟิลด์ Chrome ไม่ได้รับการเปลี่ยนแปลงอย่างถูกต้องโดยแสดงฟิลด์ที่เติมสีเหลืองแม้ว่าฟิลด์นั้นจะว่างเปล่าจริง ๆ

แม้ว่าฉันจะชอบฟังก์ชั่นออโต้โฟกัส แต่ฉันก็ไม่สามารถนึกถึงเหตุผลที่ดีที่ใคร ๆ ก็อยากให้แบบฟอร์มชัดเจนโดยอัตโนมัติ

แหล่งที่มา

น่าเศร้าที่ฟังก์ชั่นได้รับการ hardcoded wp-login.phpในบรรทัด 913-930 (WordPress 4.0) การเปลี่ยนwp-login.phpไฟล์โดยรวมเป็นความคิดที่ไม่ดีเนื่องจากอาจถูกเขียนทับในการอัปเดต WordPress ที่จะมีขึ้น ดังนั้นเราจะต้องหันไปใช้ 'แฮ็ค' สักหน่อย

แก้ไขได้ง่าย

wp_attempt_focusฟังก์ชั่นที่เรียกว่าถ้ารูปแบบไม่มีข้อผิดพลาด เราโชคดี - การตรวจสอบข้อผิดพลาดนั้นทำผ่าน PHP ซึ่งหมายความว่าเราสามารถป้องกันไม่ให้ฟังก์ชั่นการยิงโดยการแกล้งทำข้อผิดพลาดแบบฟอร์มในเวลาที่เหมาะสมโดยใช้การกระทำ WP ฉันเลือกการlogin_formกระทำเนื่องจากการกระทำเกิดขึ้นหลังจากจัดการข้อผิดพลาดเสมอก่อนที่จะเรียก JS เพิ่มรหัสต่อไปนี้ให้กับธีมของคุณfunctions.php(หรือไฟล์ปลั๊กอิน):

add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
    global $error;
    $error = TRUE;
}

การแก้ไขแฮ็ก

การแก้ไขด้านบนจะป้องกันไม่ให้ฟังก์ชั่นการยิงทั้งหมดหมายความว่าคุณจะไม่ได้รับโฟกัสอัตโนมัติที่เหมาะสม มีวิธีอื่นรอบ ๆ มัน: บัฟเฟอร์การแสดงผล HTML และการปรับเปลี่ยนทางob_startเป็นแรงบันดาลใจจากGeeklab บัฟเฟอร์ช่วยให้เราสามารถลบบางส่วนที่เฉพาะเจาะจงของรหัส - d.value = ''ในกรณีนี้เป็นส่วนหนึ่ง อย่าลืมล้างบัฟเฟอร์ด้วย

add_action("login_form", "kill_wp_attempt_focus_start");
function kill_wp_attempt_focus_start() {
    ob_start("kill_wp_attempt_focus_replace");
}

function kill_wp_attempt_focus_replace($html) {
    return preg_replace("/d.value = '';/", "", $html);
}

add_action("login_footer", "kill_wp_attempt_focus_end");
function kill_wp_attempt_focus_end() {
    ob_end_flush();
}

2
โดดเด่น การแก้ไขสำหรับสิ่งนี้ควรใช้กับคอร์ ฉันได้รับความคิดเห็นมากมายจากผู้ใช้ที่มีปัญหากับสิ่งนี้ ขอบคุณที่แบ่งปันการแก้ไข
Christine Cooper

ขอบคุณสำหรับการแก้ปัญหา ยังคิดว่าสิ่งนี้ไม่ควรอยู่ในแกนกลาง
ThiagoPonte

0

ฉันมีปัญหานี้เช่นกัน ปิดปลั๊กอิน "WP-SpamShield" โดย Scott Allen และทุกอย่างก็เริ่มทำงานอีกครั้ง


0

รหัสผ่านของฉันว่างเปล่า / ว่างเปล่าดังนั้นฉันจึงพยายามเปลี่ยนเป็นอย่างอื่นเช่น "1234" การเพิ่มพื้นที่ว่างและการลบมันไม่สามารถใช้งานได้ไม่ได้ปิดการใช้งาน JS ลองเบราว์เซอร์ที่แตกต่างกันไปแล้วมันจริง ๆ ใน Chrome หรือไม่

สิ่งที่ฉันทำคือฉันเปลี่ยนแฮชรหัสผ่านในฐานข้อมูลและใช้งานได้ wp_users.user_pass.

ในกรณีของฉันรหัสผ่าน1234เป็น BCrypted:$2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC

http://bcrypthashgenerator.apphb.com/?PlainText=1234

ภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.