Có một số lượng lớn sự ngu ngốc khi nói đến mật khẩu trong các trang web.
- Một số có lý do kỹ thuật hoàn toàn (hợp lệ hay không, đó là một câu hỏi khác, nhưng gần như tất cả chúng đều không):
Mật khẩu của bạn phải có bốn ký tự và chỉ có các chữ số.
(Bằng cách giới hạn mật khẩu ở phạm vi 0001 .. 9999, bạn chỉ cần lưu trữ chúng dưới dạng số, văn bản gốc, trong cơ sở dữ liệu)
- Khác được giải thích bởi một số suy nghĩ sai lầm rằng họ sẽ làm cho mật khẩu an toàn hơn :
Mật khẩu của bạn phải bắt đầu bằng chữ in hoa và kết thúc bằng một chữ số.
(Bằng cách này, nhà phát triển hoặc người quản lý đã cho rằng điều này thực sự sẽ buộc người dùng chọn mật khẩu an toàn, trong khi quy tắc là "Mật khẩu của bạn phải chứa tối thiểu 6 ký tự và chứa ít nhất một chữ in hoa, chữ thường và một chữ số "sẽ không thực hiện được điều đó)
- Cuối cùng, được giải thích bởi thực tế là mật khẩu được lưu trữ trên bản rõ và có một số sự mơ hồ về cách chúng được lưu trữ, xử lý hoặc truy xuất và không có thời gian để kiểm tra chúng.
Mật khẩu của bạn chứa một ký tự không hợp lệ é
.
hoặc là,
Mật khẩu của bạn y$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d
chứa một số ký tự không hợp lệ. Chỉ sử dụng các ký tự từ bảng chữ cái Latinh và chữ số.
hoặc là,
Mật khẩu của bạn không thể chứa các ký tự khoảng trắng.
Trong cả ba trường hợp, nhà phát triển chỉ đảm bảo rằng mật khẩu như thế này sẽ được lưu trữ chính xác.
Trong trường hợp đầu tiên, điều gì é
sẽ xảy ra %C3%A9
nếu được gửi thành khi gửi? Hoặc nếu cơ sở dữ liệu sẽ lưu trữ é
không chính xác?
Trong trường hợp thứ hai, điều gì sẽ xảy ra nếu PHP (tại sao PHP?) Không thể xử lý unicode và làm điều gì đó khủng khiếp khi nhận được mật khẩu như thế này? Nếu <
nhân vật gây rắc rối thì sao? Điều gì xảy ra nếu &
ký tự được hiểu là dấu phân cách trong một URL (giả sử rằng vì một số lý do, mật khẩu đang được gửi qua GET thay vì POST)? Điều gì xảy ra nếu '
được cơ sở dữ liệu diễn giải, bởi vì, hãy đoán xem, chúng ta không biết SQL Injection là gì và làm thế nào để tránh nó? Hoặc nếu '
được chuyển thành \'
?
Trong trường hợp thứ ba, điều gì sẽ xảy ra nếu PHP (một lần nữa?) Cắt khoảng trắng trong một số trường hợp và không phải trong các trường hợp khác? Điều gì sẽ xảy ra nếu các quản trị viên (người có quyền truy cập mật khẩu người dùng trong bản rõ) bị mất vì họ chỉ thấy một khoảng trắng, trong khi người dùng đã đặt ba khoảng trắng liên tiếp ?
Trong cả ba trường hợp, những sự mơ hồ đó đều được giải quyết dễ dàng thông qua thử nghiệm , đặc biệt là thử nghiệm đơn vị. Nhưng trong một số lượng lớn các dự án, không có thử nghiệm nào cả , và không có thời gian để thử nghiệm (nhưng vẫn còn nhiều thời gian để gỡ lỗi sau này).
Điều này có nghĩa là liệu nhà phát triển có cố gắng nghĩ về hậu quả có thể xảy ra khi cho phép dấu cách hoặc ký tự unicode hoặc bất kỳ ký tự nào bên ngoài ASCII 48..57 65..90 97..122 (chữ số, chữ thường, chữ in hoa) , cách dễ nhất, khi kiểm tra là không thể, là chỉ cấm chúng .
Theo tôi, đây là lý do duy nhất để cấm không gian. Yannis Rizos đã đưa ra một lý do khác liên quan đến UX. Mặc dù là một lý do chính đáng trong lý thuyết, nó hoàn toàn không hoạt động trong thực tế: các trang web được tạo bởi những người thực sự quan tâm đến UX không sửa các quy tắc mật khẩu ngu ngốc. Thay vào đó, các trang web nơi khoảng trắng thực sự bị cấm phần lớn được thực hiện bởi những người chưa bao giờ nghe về UX . Điều này đặc biệt đúng vì việc cấm bất kỳ ký tự nào thực sự gây khó chịu theo quan điểm của UX, vì mọi hạn chế liên quan đến mật khẩu, bao gồm cả những hạn chế hữu ích, là số lượng ký tự tối thiểu.