ทำไมบางเว็บไซต์ป้องกันช่องว่างในรหัสผ่าน?


16

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


อาจเป็นเพราะไซต์บางแห่งใช้การลงชื่อเพียงครั้งเดียวโดยสมมติว่า SSO ต้องใช้รหัสผ่านที่ไม่ว่างเปล่า (ไม่แน่ใจ)
NoChance

1
สิ่งที่ทำให้ฉันกลัวจริงๆก็คือเมื่อเว็บไซต์ไม่อนุญาตให้อ้างข้อความเดียวโดยเฉพาะ คุณมีเหตุผลอะไรที่เป็นไปได้นอกเหนือจากการเปิดใช้งาน"insert into USERS (..., password) values (..., '" + $POST['password'] + "');" : -S
Christian Klauser

ควรไปเพื่อความปลอดภัยไม่ใช่โปรแกรมเมอร์ นี่อาจมีอยู่แล้วแม้ว่า
Dan McGrath

คำตอบ:


20

มีจำนวนมากโง่เมื่อมันมาถึงรหัสผ่านในเว็บไซต์

  • บางคนมีเหตุผลทางเทคนิคอย่างหมดจด(ถูกต้องหรือไม่นั่นคือคำถามอื่น แต่เกือบทั้งหมดไม่ใช่):

รหัสผ่านของคุณจะต้องมีความยาวสี่ตัวอักษรและมีตัวเลขเท่านั้น

(โดยการ จำกัด รหัสผ่านให้กับ 0001 .. ช่วง 9999 คุณสามารถเก็บไว้เป็นตัวเลข, ข้อความธรรมดา, ในฐานข้อมูล)

  • อื่น ๆ อธิบายโดยความคิดที่ผิดพลาดบางอย่างที่พวกเขาจะทำให้รหัสผ่านที่ปลอดภัยยิ่งขึ้น :

รหัสผ่านของคุณจะต้องเริ่มต้นด้วยอักษรตัวใหญ่และลงท้ายด้วยหลัก

(โดยการทำเช่นนี้ผู้พัฒนาหรือผู้จัดการสันนิษฐานว่าสิ่งนี้จริง ๆ แล้วจะบังคับให้ผู้ใช้เลือกรหัสผ่านที่ปลอดภัยในขณะที่กฎเป็น "รหัสผ่านของคุณต้องมีอักขระอย่างน้อย 6 ตัวและมีอักษรตัวใหญ่อย่างน้อยหนึ่งตัวพิมพ์เล็กและ ตัวเลข "จะล้มเหลวอย่างน่าอัศจรรย์ที่จะทำมัน)

  • ในที่สุดก็มีการอธิบายด้วยความจริงที่ว่ารหัสผ่านนั้นถูกเก็บรักษาไว้อย่างเรียบง่ายและมีความคลุมเครือเกี่ยวกับวิธีการจัดเก็บประมวลผลหรือดึงข้อมูลและไม่มีเวลาทดสอบหน่วย

éรหัสผ่านของคุณประกอบด้วยอักขระที่ไม่ถูกต้อง

หรือ,

รหัสผ่านของคุณy$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!dมีอักขระที่ไม่ถูกต้อง ใช้อักขระจากตัวอักษรละตินและตัวเลขเท่านั้น

หรือ,

รหัสผ่านของคุณต้องไม่มีอักขระช่องว่าง

ในทั้งสามกรณีผู้พัฒนาได้รับการประกันว่ารหัสผ่านเช่นนี้จะถูกจัดเก็บอย่างถูกต้อง

  • ในกรณีแรกสิ่งที่ถ้าéจะเปลี่ยนเป็น%C3%A9เมื่อส่ง? หรือถ้าฐานข้อมูลจะจัดเก็บéไม่ถูกต้อง

  • ในกรณีที่สองจะเกิดอะไรขึ้นถ้า PHP (เพราะเหตุใด PHP) ไม่สามารถจัดการกับยูนิโค้ดได้และสิ่งที่น่ากลัวเมื่อได้รับรหัสผ่านเช่นนี้? เกิดอะไรขึ้นถ้า<ตัวละครทำให้เกิดปัญหา? เกิดอะไรขึ้นถ้า&ตัวละครถูกตีความว่าเป็นตัวแยกใน URL (สมมติว่าด้วยเหตุผลบางอย่างรหัสผ่านจะถูกส่งผ่าน GET แทน POST)? จะเกิดอะไรขึ้นถ้า'ฐานข้อมูลตีความเพราะเดาว่าเราไม่รู้ว่า SQL Injection คืออะไรและจะหลีกเลี่ยงได้อย่างไร หรือถ้า'เปลี่ยนเป็น\'อะไร

  • ในกรณีที่สามจะเกิดอะไรขึ้นถ้า PHP (อีกครั้ง?) จดจ้องช่องว่างในบางกรณีและไม่ใช่ในกรณีอื่น ๆ เกิดอะไรขึ้นถ้าผู้บริหาร (ที่น่าแปลกใจที่มีการเข้าถึงรหัสผ่านผู้ใช้ใน plaintext) จะหายไปเพราะพวกเขาเห็นเพียงหนึ่งช่องว่างในขณะที่ผู้ใช้มีการตั้งสามช่องว่างติดต่อกัน ?

ในทั้งสามกรณีความคลุมเครือเหล่านั้นสามารถแก้ไขได้อย่างง่ายดายผ่านการทดสอบโดยเฉพาะการทดสอบหน่วย แต่ในโครงการจำนวนมากไม่มีการทดสอบเลยและไม่มีเวลาในการทดสอบ (แต่ยังมีเวลาอีกมากในการดีบักในภายหลัง)

ซึ่งหมายความว่าผู้พัฒนาพยายามที่จะคิดถึงผลที่ตามมาที่อาจเกิดขึ้นจากการอนุญาตให้มีช่องว่างหรือ unicode อักขระหรือเพียงแค่ตัวละครใด ๆ นอก ASCII 48..57 .. 65 .. 90 90 90..90 ∪ 97..122 (ตัวเลขตัวอักษรตัวพิมพ์เล็กตัวอักษรตัวพิมพ์ใหญ่) , วิธีที่ง่ายที่สุดเมื่อการทดสอบเป็นไปไม่ได้เป็นเพียงการห้ามเขา

ในความคิดของฉันนี้เป็นเหตุผลเดียวที่จะห้ามช่องว่าง Yannis Rizos ให้อีกเหตุผลที่เกี่ยวข้องกับ UX ในขณะที่เป็นเหตุผลที่เป็นไปได้ในทางทฤษฎีมันไม่สามารถใช้งานได้จริง: เว็บไซต์ที่สร้างโดยผู้ที่สนใจเกี่ยวกับ UX ไม่ได้แก้ไขกฎรหัสผ่านโง่ ๆ ในทางกลับกันเว็บไซต์ที่ห้ามใช้ช่องว่างนั้นส่วนใหญ่ทำโดยผู้ที่ไม่เคยได้ยินเกี่ยวกับ UX มาก่อน นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งเนื่องจากการห้ามอักขระใด ๆ นั้นน่ารำคาญจริง ๆ จากมุมมองของ UX เนื่องจากข้อ จำกัด เกี่ยวกับรหัสผ่านใด ๆ รวมถึงอักขระที่มีประโยชน์เป็นจำนวนอักขระขั้นต่ำ


ไม่ต้องพูดถึงว่าเมื่อคุณกำจัดช่องว่างคุณกำลังกำจัดรหัสผ่านยาว ๆ ที่จำง่าย (และความยาวได้รับการพิสูจน์แล้วว่ามีประสิทธิภาพมากกว่าความซับซ้อนในการป้องกันการแคร็ก) และกระตุ้นให้ผู้ใช้ใช้รหัสผ่านซึ่งพูดพล่อยๆ ของช่องว่าง
Lèsemajesté

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

@ โทมัส: นี่คือความแตกต่างระหว่างทฤษฎีและความรู้ทั่วไปและการปฏิบัติด้วยความไม่รู้ทั่วไปและข้อ จำกัด เวลาที่ผู้คนจำนวนมากไม่ต้องการเสียเวลาในการทดสอบโดยไม่สนใจว่าพวกเขาจะใช้เวลาในการดีบักอย่างน้อยสองครั้งในภายหลัง
Arseni Mourzenko

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

3

คำตอบคือประวัติศาสตร์

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

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

ควรจะมีข้อ จำกัด ในระบบใหม่ในขณะนี้ ? ฉันหวังว่าจะไม่ได้ - ด้วยเหตุผลที่น้อยกว่านี้


คุณกำลังบอกว่ามีข้อ จำกัด ทางเทคโนโลยีที่มีช่องว่างในรหัสผ่านที่มีไม่มาก่อนหรือไม่ พื้นที่เก็บข้อมูลส่วนใดที่เล่นอย่างนั้น?
Ian Hunter

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

2

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

อันที่จริงเพื่อน Windows ของฉันส่วนใหญ่ไม่รู้ว่าพวกเขาสามารถใช้ช่องว่างในรหัสผ่านของพวกเขาได้ดังนั้นตามคำตอบของ Tim Medora เจ้าของเว็บไซต์ไม่ต้องการใช้โอกาสกับ lamahs (ขออภัย) หรืออาจมีบางคนมี ความเข้าใจผิดและ / หรือไม่รู้ว่าช่องว่างข้อดีสามารถให้ได้


1
ฉันชอบการปอกช่องว่างนำหน้า / ต่อท้ายจากรหัสผ่านเพราะพวกเขามักจะทำให้เกิดปัญหา แต่นั่นเป็นเหตุผลที่ไม่อนุญาตพวกเขาพวกเขาจะถูกปล้นทั้งในการตั้งค่าและการทดสอบไม่มีปัญหา
Loren Pechtel

และ "ปัญหา" คืออะไร? ฉันได้เน้นในคำตอบที่ควรเว้นวรรค "พวกเขาจะถูกปล้นทั้งในการตั้งค่าและการทดสอบ" - แล้วประเด็นคืออะไร? จากนั้น "1 4m 1337" และ "1 4am 1337" ทั้งสองแฮชไปที่ค่าเดียวกัน (ที่จริงแล้วมีความเป็นไปได้มากมายในทางทฤษฎี)
yati sagade

What's the point then?จุดเล็กน้อยคือรหัสผ่านมีความเอนโทรปีน้อยกว่าที่ผู้ใช้ต้องการ และบางระบบตัดแต่ง GET / POST vars โดยค่าเริ่มต้นการเปลี่ยนแปลง (ไม่น่าจะเป็น) พฤติกรรมนั้นจะนำไปสู่ปัญหาที่ร้ายแรงยิ่งขึ้น
yannis

@Yati sagade: ฉันไม่ได้พูดถึงเรื่องการถอดช่องว่างภายใน ฉันกำลังพูดถึงช่องว่างนำหน้าและต่อท้าย - ผู้คนไม่ทราบว่ามีพื้นที่ว่างอยู่และทำให้เกิดความล้มเหลวในการเข้าสู่ระบบ ในทำนองเดียวกันหากคุณเห็นรหัสผ่านนั่นคือตัวพิมพ์ใหญ่ทั้งหมดพลิกเป็นตัวพิมพ์เล็กอาจเป็นคนที่ไม่ทราบว่าตัวพิมพ์ใหญ่เปิดอยู่
Loren Pechtel

-1

มันทำด้วยเหตุผลเดียวกันกับที่เว็บไซต์หลายแห่งไม่อนุญาตให้ใช้เครื่องหมายยัติภังค์, เครื่องหมายอัญประกาศเดี่ยวหรือตัวอักษรที่ไม่ใช่ ASCII ถึงแม้ว่าสิ่งเหล่านี้เป็นวิธีปฏิบัติทั่วไปมากแม้ในสหรัฐอเมริกาเท่านั้นและต้องใช้งานมากกว่าที่จะไม่อนุญาตให้ใช้อักขระเหล่านี้ พวกเขา

นอกจากนี้ยังทำเช่นเดียวกันด้วยเหตุผลเดียวกันที่ตัวกรองคำของเว็บไซต์จำนวนมากจะไม่อนุญาตให้คุณใช้คำเช่น "อวดดี", "ชะลอ" หรือแม้แต่ "สะสม" (แม้ว่าคำติชมทางเชื้อชาติทั่วไปจะไม่เป็นไร)

อาจเป็นเพราะนักพัฒนาจำนวนมากขาดสามัญสำนึกอย่างสมบูรณ์หรืออย่างน้อยก็มีจินตนาการที่ จำกัด มากเมื่อพิจารณาถึงอินพุตและสถานการณ์ของผู้ใช้ที่เป็นไปได้ เปอร์เซ็นต์เล็กน้อยของพวกเขาอาจใช้งานข้อมูลเท็จได้ (ซึ่งไม่รวมอักขระที่ไม่ใช่ตัวอักษรและตัวเลขเป็นวิธีปฏิบัติมาตรฐานหรืออัลกอริทึมการแฮชหรือวิธีการจัดเก็บไม่สามารถจัดการช่องว่างหรืออักขระพิเศษ) คนอื่นอาจขี้เกียจพวกเขากังวลเกี่ยวกับปัญหาชุดอักขระดังนั้นพวกเขาจึง จำกัด การป้อนข้อมูลให้เหลือพื้นที่อักขระเพียงเล็กน้อย และจากนั้นอาจมีผู้ที่ใช้การตรวจสอบความถูกต้อง / การสุขาภิบาลเนื่องจากการหวาดระแวงเนื่องจากขาดความเข้าใจในการคุกคามที่แท้จริง


คุณจะต้องใช้เหตุผลใดในการยกเว้นบัญชีขาวที่บังคับใช้การเข้ารหัสอักขระเฉพาะ ความจริงที่ว่าการ จำกัด ตัวอักษรโดยพลการไม่ทำให้เกิดประโยชน์ใด ๆ ในขณะที่การเลือกรหัสผ่านที่ผู้ใช้อ่อนแอลงนั้นเป็นสิ่งที่ฉันยึดถือความคิดเห็นนี้ ตัวอย่างทั้งหมดที่ฉันให้ไว้เป็นอาการของนักพัฒนาที่ไม่ได้คิดผ่านตัวเลือกการออกแบบอย่างรอบคอบเพียงพอ
Lèsemajesté
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.