การบันทึกล้มเหลวความพยายามในการเข้าสู่ระบบจะเปิดเผยรหัสผ่าน


38

ฉันเริ่มเข้าสู่ระบบล้มเหลวในการพยายามเข้าสู่ระบบบนเว็บไซต์ของฉันด้วยข้อความเช่น

Failed login attempt by qntmfred

ฉันสังเกตว่าบันทึกเหล่านี้มีลักษณะเป็นอย่างไร

Failed login attempt by qntmfredmypassword

ฉันเดาว่าบางคนมีการเข้าสู่ระบบที่ล้มเหลวเพราะพวกเขาพิมพ์ชื่อผู้ใช้และรหัสผ่านในฟิลด์ชื่อผู้ใช้ รหัสผ่านถูกแฮชในฐานข้อมูล แต่ถ้าฐานข้อมูลถูกบุกรุกข้อความล็อกเหล่านี้อาจเป็นวิธีที่ผู้โจมตีสามารถคิดรหัสผ่านสำหรับจำนวนเปอร์เซ็นต์ของผู้คนที่มีการล็อกอินล้มเหลวเช่นนี้

มีวิธีที่ดีกว่าในการจัดการกับเรื่องนี้? ฉันควรกังวลเกี่ยวกับความเป็นไปได้นี้หรือไม่?


14
ใช่คุณควรกังวลเกี่ยวกับเรื่องนี้
FoolishSeth


4
คำถามที่น่าสนใจเพราะมันข้าม UX และความปลอดภัย ดังที่กล่าวไว้ในลิงก์ใดลิงก์หนึ่งของ Michael คุณสามารถป้องกันกรณีส่วนใหญ่ได้โดยใช้ Javascript (ฝั่งไคลเอ็นต์) ปิดใช้งานปุ่มล็อกอินในขณะที่ฟิลด์รหัสผ่านว่างเปล่า ผู้ใช้ที่ไม่มี Javascript ยังคงสามารถใช้หน้าจอเข้าสู่ระบบด้วยวิธีนี้เนื่องจากปุ่มจะไม่ถูกปิดใช้งานในกรณีนั้น
MSalters

คำตอบ:


65

ลองแบบนี้:

หากชื่อผู้ใช้นั้นมีอยู่เข้าสู่ระบบ "ล้มเหลวในการพยายามเข้าสู่ระบบโดยusername" ถ้าไม่เข้าสู่ระบบ "ล้มเหลวในการพยายามเข้าสู่ระบบโดย IP 123.45.67.89" แทน ที่ควรดูแลปัญหาของการมีรหัสผ่านปรากฏขึ้นในบันทึกโดยไม่ตั้งใจ


14
คุณสามารถตรวจสอบรหัสผ่านที่ว่างเปล่าและล้มเหลวด้วยข้อผิดพลาดที่เหมาะสมในกรณีนั้น
Mike Weller

การพิมพ์ชื่อผู้ใช้เป็นปัญหาที่ OP อธิบาย บางครั้งการเข้าสู่ระบบที่ล้มเหลวนั้นเกิดจากผู้ใช้พลาดปุ่ม [tab] และพิมพ์ทั้งชื่อผู้ใช้และรหัสผ่านลงในช่องชื่อผู้ใช้และกดปุ่ม Enter ข้อเสนอแนะของคุณไม่ได้จัดการเรื่องนี้
BZink

7
@BZink: ใช่ หากชื่อผู้ใช้ที่มีอยู่เข้าสู่ระบบดังกล่าว หากสิ่งที่ผู้ใช้ทำคือการเพิ่มรหัสผ่านลงบนชื่อผู้ใช้โดยไม่ตั้งใจสตริงที่ได้นั้นแทบจะไม่ได้เป็นชื่อผู้ใช้ที่ถูกต้องด้วยเช่นกัน
Mason Wheeler

12

ทำไมไม่ลองตรวจสอบว่าชื่อผู้ใช้นั้นมีอยู่ในฐานข้อมูลหรือไม่ สิ่งนี้จะทำให้คุณมี 2 ผลลัพธ์ที่เป็นไปได้

  1. ผู้ใช้ป้อนชื่อผู้ใช้ที่ถูกต้อง จากนั้นคุณสามารถบันทึกสิ่งที่คุณบันทึกได้ทันที

  2. ผู้ใช้ป้อนรหัสผ่านในฟิลด์ชื่อผู้ใช้ดังนั้นชื่อผู้ใช้ไม่ถูกต้อง เพียงป้อนรายการบันทึกที่ระบุว่ามีการพยายามเข้าสู่ระบบล้มเหลวโดยผู้ใช้ที่ไม่ระบุชื่อ

และแน่นอนว่าคุณสามารถมีฟิลด์เพิ่มเติมเพื่อบันทึก IP วันที่และอะไรไม่ได้?


3
ทำไมไม่ผนวกแฮชของชื่อผู้ใช้เข้ากับรายการบันทึกใน # 2 การดำเนินการนี้จะซ่อนรหัสผ่าน แต่ในขณะเดียวกันก็อนุญาตให้บางคนกำลังดูบันทึกเพื่อตรวจสอบว่ามีผู้ใช้ที่ไม่ปรากฏชื่อเดียวกันหลายครั้ง
emory

หากไม่มีบันทึกที่มีชื่อผู้ใช้มันชัดเจนว่าพวกเขาเข้าใจผิดดังนั้นนี่จึงเป็นประโยชน์สำหรับการแก้ไขปัญหา
JeffO

2
@emory หากผู้ใช้พิมพ์รหัสผ่านโดยไม่ได้ตั้งใจกับชื่อผู้ใช้งานไม่มีวิธีที่จะแยกเฉพาะส่วนชื่อผู้ใช้ของสตริง และบางคนที่ป้อนรหัสผ่านไปยังฟิลด์ชื่อผู้ใช้ซ้ำหลายครั้งฉันไม่คิดว่า นี่เป็นข้อผิดพลาด "ปิดครั้งเดียว" ที่คุณทำ เกิดขึ้นกับสิ่งที่ดีที่สุดของเรา แต่ฉันสงสัยว่ามีใครโง่พอที่จะทำมันต่อไปโดยที่ไม่รู้ตัว: D
galdikas

@galdikas ไม่จำเป็นต้องแยกสิ่งใดจากชื่อผู้ใช้ ตัวอย่างเช่นฉันเป็นผู้ใช้ 'ผู้ใช้' ด้วยรหัสผ่าน 'รหัสผ่าน' ฉันเข้าสู่ระบบด้วย 'userpassword' และฟังก์ชันแฮชของคุณแมป 'userpassword' ถึง 17 บันทึกจะบอกว่า "การพยายามเข้าสู่ระบบล้มเหลวโดยผู้ใช้ที่ไม่ระบุ 17"
emory

1
@galdikas คงไม่มีใครโง่หรือขัดขืนพอที่จะทำมันต่อไปมากกว่าสองสามครั้ง แต่มีสคริปต์ที่โง่และขัดขืนมากพอที่จะทำหลายพันครั้ง คุณไม่ต้องการทราบความแตกต่างหรือไม่
emory

1

การพิจารณา:

  1. คุณสามารถตรวจพบเมื่อสิ่งนี้เกิดขึ้นตรงข้ามกับคนที่พิมพ์ชื่อผู้ใช้ผิดพลาดหรือไม่? การบันทึกชื่อผู้ใช้ที่พิมพ์ผิดอาจมีประโยชน์สำหรับวัตถุประสงค์ในการสนับสนุนเช่นตอบคำถาม "ทำไมฉันไม่สามารถเข้าสู่ระบบ" ด้วยคำตอบ "คุณพิมพ์ชื่อผู้ใช้ที่พิมพ์ผิดที่ควรเป็นเครื่องหมายจุดไม่ใช่จุด" หรือ "คุณมีเครื่องหมายโคลอน จากนั้นพื้นที่ว่าง - ให้คุณตัดและวางมันแล้ว " หากคุณมีผู้ใช้ที่จ่ายเงินจำนวนเล็กน้อย (เช่นไม่ใช่เว็บไซต์เครือข่ายสังคมอื่น) คุณอาจต้องให้การสนับสนุนเช่นนี้

  2. การกระทำที่เหมาะสมควรมีคนทำอะไร? ชื่อผู้ใช้อาจเป็นตัวบ่งชี้ความพยายามในการแฮ็ค ความจริงที่ว่าชื่อผู้ใช้ไม่ปรากฏในรายการของคุณไม่ได้หมายความว่าคุณไม่จำเป็นต้องรู้ว่ามันคืออะไร อย่างไรก็ตามหากคุณเชื่อว่านี่เป็นปัญหาที่ร้ายแรงและคุณสามารถตรวจสอบได้ว่ามีรหัสผ่านเดิมอยู่ที่ไหนคุณอาจต้องการให้ผู้ใช้เปลี่ยนรหัสผ่านหลังจากเกิดเหตุการณ์นี้ขึ้น

  3. การปฏิบัติในอุตสาหกรรมคืออะไร? แนวปฏิบัติในอุตสาหกรรมคือการบันทึกฟิลด์ชื่อผู้ใช้ แต่ไม่ใช่ฟิลด์รหัสผ่าน คุณไม่น่าจะถูกไล่ออกเนื่องจากการทำเช่นนี้

หากคุณไม่มีข้อควรพิจารณาที่ไม่ธรรมดาฉันขอแนะนำให้ทำตามวิธีปฏิบัติในอุตสาหกรรมและบันทึกฟิลด์ชื่อผู้ใช้โดยไม่คำนึงถึง พิจารณาการเปลี่ยนแปลงรหัสผ่านแบบบังคับเป็นข้อเสนอแนะ 2 หากคุณคิดว่านี่ไม่เพียงพอ


1

เพื่อความปลอดภัยการบันทึกในแอพปัจจุบันของฉันไม่ได้เก็บพารามิเตอร์ที่ส่งผ่านไปยังวิธีการเข้าสู่ระบบหรือการรีเซ็ตรหัสผ่าน [Redacted]โทรล็อกมีพารามิเตอร์ตัวว่าการควบคุมนี้ซึ่งเมื่อตั้งค่าเป็นจริงแทนที่พารามิเตอร์ที่เก็บไว้กับวัตถุ แน่นอนดังนั้นฉันจึงพลาดข้อมูลเล็กน้อย แต่ฉันมีที่อยู่ IP ของพวกเขาและฉันไม่อยากเสี่ยงที่จะได้รับบางสิ่งที่ละเอียดอ่อนในข้อความธรรมดา

หากคุณต้องการบันทึกสิ่งนี้ฉันขอแนะนำว่าเมื่อเข้าสู่ระบบพยายามเข้าสู่ระบบคุณตรวจสอบฐานข้อมูลสำหรับผู้ใช้ที่มีชื่อตรงกับสิ่งที่คุณมีในฟิลด์ชื่อผู้ใช้และเก็บไว้เฉพาะเมื่อคุณมีการแข่งขัน มิฉะนั้นคุณเพียงเก็บไว้เป็น "ผู้ใช้ที่ไม่รู้จัก" คุณอาจจะรู้สึกแฟนซีตรวจสอบว่าค่านี้มีสิ่งนั้นหรือไม่ แต่มีความเสี่ยงที่คุณจะได้รับชุดค่าผสมเช่น [ผู้ใช้] [รหัสผ่าน] และ [ผู้ใช้] [ดาบ] ในกรณีนี้คุณสามารถตรวจสอบกับ IP และอนุมานได้ว่า คุณจัดเก็บรหัสผ่านของใครบางคนไว้โดยไม่ตั้งใจโดยไม่ตั้งใจ คุณสามารถขยายนี้ไม่น่า แต่ที่เป็นไปได้ [User] [Password] และ [userPassword] [??] ซึ่งในกรณีนี้คุณสามารถดู "การเข้าสู่ระบบไม่ประสบความสำเร็จโดย userPassword" ตามด้วย "การเข้าสู่ระบบที่ประสบความสำเร็จโดยผู้ใช้" และได้ข้อสรุปทั้งหมดของรหัสผ่านของผู้ใช้ โดยทั่วไปเพื่อความปลอดภัยฉันจะบอกว่าไม่บันทึกชื่อผู้ใช้เว้นแต่ว่าการเข้าสู่ระบบจะสำเร็จ

แก้ไขเพื่อเพิ่ม:

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

ตัวอย่างเช่นมีการกล่าวว่าเมื่อลูกค้าถามว่า "ทำไมฉันไม่สามารถเข้าสู่ระบบได้?" ชื่อผู้ใช้ที่บันทึกไว้จะช่วยให้คุณสามารถระบุความผิดพลาดได้ นี่เป็นเรื่องจริง แต่ก็ไม่คุ้มกับความเสี่ยงที่จะต้องจับรหัสผ่านด้วย ฉันจะทำเช่นนี้แทนการเปลี่ยนเส้นทางผู้ใช้กลับไปที่แบบฟอร์มการเข้าสู่ระบบเมื่อความล้มเหลวเน้นฟิลด์ชื่อผู้ใช้และ repopulate มันด้วยสิ่งที่พวกเขาพิมพ์เพื่อให้พวกเขาสามารถมองเห็นด้วยตนเอง

อีกเหตุผลคือมันช่วยให้คุณระบุความพยายามในการแฮ็ก สตริงของความล้มเหลวต่อหนึ่งชื่อผู้ใช้อาจเป็นความพยายามในการบังคับใช้รหัสผ่านที่ดุร้าย ฉันจะทำเช่นนี้โดยมีคอลัมน์ "BadLogins" ในตารางผู้ใช้ซึ่งจะเพิ่มขึ้นทุกครั้งที่การเข้าสู่ระบบล้มเหลวด้วยชื่อผู้ใช้ที่ตรงกับผู้ใช้นี้และถูกรีเซ็ตเป็นศูนย์ในการเข้าสู่ระบบที่ประสบความสำเร็จหลังจากบอกผู้ใช้ว่า " x พยายามเข้าสู่ระบบไม่สำเร็จตั้งแต่การเข้าสู่ระบบครั้งล่าสุดของคุณ "และให้คำแนะนำแก่พวกเขาเกี่ยวกับสิ่งที่ต้องทำหากพวกเขาไม่คิดว่าความพยายามนั้นมาจากพวกเขา หากคุณต้องการให้ละเอียดจริงๆคุณอาจมีคอลัมน์อื่นที่เก็บค่าสุดท้ายของคอลัมน์ BadLogins แม้หลังจากการเข้าสู่ระบบที่สำเร็จและ / หรือคอลัมน์ที่เก็บค่าที่สูงที่สุดตลอดกาลของคอลัมน์นี้และ / หรือคอลัมน์ที่ เก็บจำนวนการเข้าสู่ระบบที่ล้มเหลวทั้งหมดที่บัญชีนี้เคยมี

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