ไม่ใช้ SSL
สิ่งนี้ไม่ปลอดภัยหากรหัสผ่านถูกส่งผ่านเครือข่ายเป็นข้อความธรรมดา การใส่รหัสผ่านในฝั่งเซิร์ฟเวอร์ก็ไม่ปลอดภัยเช่นกันหากรหัสผ่านถูกส่งผ่านเครือข่ายในรูปแบบข้อความล้วน
เนื่องจาก<input type="password"/>
แท็กHTML จะส่งเนื้อหาเป็นข้อความธรรมดาปัญหานี้จะเกิดขึ้นไม่ว่าคุณจะเก็บรหัสผ่านไว้บนเซิร์ฟเวอร์ได้อย่างไรเว้นแต่เว็บไซต์ของคุณจะใช้ SSL เพื่อส่งรหัสผ่าน
(การพิสูจน์ตัวตน HTTP ซึ่งปรากฏขึ้นในกล่องโต้ตอบในเบราว์เซอร์เพื่อขอรหัสผ่านอาจหรือไม่อาจเป็นข้อความที่ชัดเจนขึ้นอยู่กับกลไกการตรวจสอบสิ่งที่เซิร์ฟเวอร์และเบราว์เซอร์มีเหมือนกันดังนั้นอาจเป็นวิธีที่จะหลีกเลี่ยงปัญหานี้ SSL.)
ไม่ใช่หากผู้ดูแลไซต์สงสัย
ทีนี้สมมติว่าคุณกำลังใช้ HTTPS เพื่อทำเว็บไซต์นี่อาจปลอดภัยถ้าคุณเชื่อถือผู้ดูแลไซต์ของคุณ (ผู้ที่สามารถอ่านรหัสผ่านแบบข้อความธรรมดา) และคนอื่น ๆ ที่สามารถเข้าถึงเครื่องทำงานได้อย่างถูกต้อง ตอนนี้อาจเห็นได้ชัดว่าพวกเขาสามารถทำอะไรก็ได้ที่พวกเขาต้องการกับเว็บไซต์ของคุณ (ตั้งแต่พวกเขาดูแลมัน) แต่ถ้าพวกเขาสามารถอ่านรหัสผ่านพวกเขาอาจจะสามารถใช้คู่เข้าสู่ระบบ / รหัสผ่านที่ถูกขโมยในเว็บไซต์ของผู้อื่น
วิธีที่ทำให้รหัสผ่านปลอดภัยจากผู้ดูแลระบบ
วิธีหนึ่งที่ปลอดภัยในการจัดเก็บและตรวจสอบรหัสผ่านมีดังนี้:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
สำหรับฟังก์ชั่นแฮชลองใช้สิ่งที่แข็งแกร่งและสิ่งที่ยังไม่มีโต๊ะสายรุ้งที่ดีอยู่ในป่า คุณสามารถเปลี่ยนความยาวของเกลือได้หากจำเป็นต้องหลีกเลี่ยงโต๊ะสายรุ้ง
ความแปรปรวนในเวลาแฝงเครือข่ายของคุณและไม่ว่าชื่อผู้ใช้จะได้รับการเปิดเผยสู่สาธารณะหรือไม่คุณอาจต้องการให้มีการคำนวณเส้นทางของรหัสอื่นhash('0000'+entered_password)
หากผู้ใช้ไม่มีอยู่เพื่อป้องกันผู้โจมตีจาก กำหนดชื่อผู้ใช้ที่ถูกต้องตามเวลาที่ใช้ตรวจสอบว่ารหัสผ่านไม่ถูกต้อง