Webサイトのパスワードに関しては、非常に多くの愚かさがあります。
- いくつかは純粋に技術的な理由があります(有効かどうか、それは別の質問ですが、ほとんどすべてはそうではありません):
パスワードは4文字で、数字のみである必要があります。
(パスワードを0001 .. 9999の範囲に制限することにより、単純に数字としてプレーンテキストでデータベースに保存できます)
- その他は、パスワードをより安全にするという誤った考えによって説明されます:
パスワードは大文字で始まり、数字で終わる必要があります。
(これを行うことにより、開発者またはマネージャーは、これによりユーザーが安全なパスワードを選択するよう強制されると想定しましたが、「パスワードには6文字以上、大文字、小文字、 「数字」は魔法のように失敗します)
- 最後に、パスワードはプレーンテキストで保存されるという事実によって説明されます。また、パスワードの保存、処理、または取得方法についていくつかのあいまいさがあり、それらを単体テストする時間はありません。
パスワードに無効な文字が含まれていますé
。
または、
パスワードy$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d
に無効な文字が含まれています。ラテンアルファベットと数字のみを使用してください。
または、
パスワードに空白文字を含めることはできません。
3つのケースすべてにおいて、開発者はこのようなパスワードが正しく保存されることを保証していました。
最初のケースでは、送信時に何にé
変換さ%C3%A9
れますか?または、データベースがé
正しく保存されない場合はどうなりますか?
2番目のケースでは、PHP(なぜPHP?)がUnicodeを処理できず、このようなパスワードを受け取ったときに何かひどいことをした場合はどうでしょうか?<
キャラクターがトラブルを起こすとどうなりますか?&
文字がURLの区切り文字として解釈された場合(何らかの理由で、パスワードがPOSTではなくGETで送信されていると仮定した場合)'
データベースが解釈した場合、SQLインジェクションとは何か、それを回避する方法がわからないので、どうすればよいでしょうか?それとも、何に'
変換され\'
ますか?
3番目のケースで、PHPが(場合によっては)他のケースではなく空白を削除する場合はどうなりますか?ユーザーが3つの連続した空白を設定している間に、空白が1つしか表示されないために管理者(プレーンテキストでユーザーのパスワードに驚くほどアクセスできる)が失われた場合はどうなりますか?
3つすべてのケースで、これらのあいまいさは、テスト、特に単体テストによって簡単に解決されます。しかし、膨大な量のプロジェクトでは、テストがまったく行われず、テストする時間もありません(ただし、後でデバッグするのに十分な時間はあります)。
これは、開発者がスペース、Unicode文字、またはASCII 48..57∪65..90∪97..122(数字、小文字、大文字)以外の任意の文字を許可した場合に考えられる結果について考えようとすることを意味します。 、テストが不可能な場合の最も簡単な方法は、それらを禁止することです。
私の意見では、これがスペースを禁止する唯一の理由です。Yannis Rizosは、UXに関連する別の理由を示しました。理論的にはもっともらしい理由ですが、実際にはまったく機能しません。実際にUXを気にする人が作成したWebサイトは、愚かなパスワード規則を修正しません。その代わり、ホワイトスペースが実際に禁止されているウェブサイトの大部分は、UXについて聞いたことがない人々によって行われています。UXの観点から見ると、有効な制限を含むパスワード関連の制限が最小文字数であるため、文字を禁止するのは本当に面倒なので、これは特に当てはまります。