Існує величезна кількість дурощів, коли справа стосується паролів на веб-сайтах.
- У деяких є чисто технічні причини (дійсні чи ні, це вже інше питання, але майже всі вони не є):
Ваш пароль повинен містити чотири символи та мати лише цифри.
(Обмеживши пароль діапазоном 0001 .. 9999, ви можете просто зберігати їх як число, простий текст у базі даних)
- Інші пояснюються помилковими думками, що вони зроблять паролі більш безпечними :
Ваш пароль повинен починатися з великої літери і закінчуватися цифрою.
(Роблячи це, розробник або менеджер припускали, що це фактично змусить користувачів вибрати безпечний пароль, тоді як правило "Ваш пароль повинен містити не менше 6 символів і містити принаймні одну велику літеру, малі літери та цифра "магічно не зможе це зробити)
- Інші, нарешті, пояснюються тим, що паролі зберігаються в простому тексті , і існують певні неясності щодо того, як вони зберігаються, обробляються або витягуються, і немає часу на те, щоб перевірити їх одиницю.
Ваш пароль містить недійсний символ é
.
або,
Ваш пароль y$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d
містить кілька недійсних символів. Використовуйте символи з латинського алфавіту та лише цифри.
або,
Ваш пароль не може містити символів пробілу.
У всіх трьох випадках розробник просто гарантував, що такі паролі будуть зберігатися правильно.
У першому випадку, що, якщо é
буде перетворено %C3%A9
надіслане? Або що робити, якщо база даних зберігатиметься é
неправильно?
У другому випадку, що робити, якщо PHP (чому PHP?) Не може мати справу з unicode, і робить щось жахливе при отриманні такого пароля? Що робити, якщо <
персонаж викликає неприємності? Що робити, якщо &
символ трактується як роздільник у URL-адресі (якщо припустити, що чомусь пароль надсилається через GET замість POST)? Що робити, якщо '
інтерпретується база даних, тому що, здогадайтесь, ми не маємо уявлення, що таке інжекція SQL і як цього уникнути? Або що робити, якщо '
перетворюється на \'
?
У третьому випадку, що робити, якщо PHP (знову ж таки?) Обрізає пробіли в деяких випадках, а не в інших? Що робити, якщо адміністратори (у яких напрочуд доступ до паролів користувачів у простому тексті) втрачені, оскільки вони бачать лише одне пробіл, а користувач встановив три послідовних пробіли ?
У всіх трьох випадках ці двозначності легко вирішуються за допомогою тестування , особливо тестування одиниць. Але у величезній кількості проектів взагалі немає тестування і часу на тестування (але все ж достатньо часу для налагодження пізніше).
Це означає, що чи розробник намагається подумати про можливі наслідки дозволу пробілів , або символів Unicode, або просто будь-якого символу поза ASCII 48..57 ∪ 65..90 ∪ 97..122 (цифри, малі літери, великі літери) , найпростіший спосіб, коли тестування неможливо - це просто заборонити їх .
На мою думку, це єдина причина заборонити пробіли. Янніс Різос дав ще одну причину, пов’язану з UX. Будучи правдоподібною причиною в теорії, це практично не працює на практиці: веб-сайти, створені людьми, які насправді дбають про UX, не фіксують дурних правил пароля. Натомість веб-сайти, де пробіл фактично заборонений, здебільшого роблять люди, які ніколи не чули про UX . Це особливо актуально, оскільки заборона будь-якого символу насправді дратує з точки зору UX, оскільки будь-яке обмеження, пов’язане з паролем, включаючи корисні, як мінімальна кількість символів.