現在保険会社のWebサイトに登録しています。私のパスワードは16文字で、さまざまな文字、数字、特殊文字などを使用しています。ただし、制限のリストは次のとおりです。
パスワードを書き留めます。
- 6〜12文字である必要があります
- スペース、特殊/国際文字を含めることはできません
- ユーザー名、姓、名を含めることはできません
- 大文字と小文字が区別されます
- 少なくとも1つの数字と1つの文字を含む必要があります
私は、最低6文字を理解できます。名前の一部を許可せず、大文字と小文字を区別し、少なくとも1つの数字と文字が必要です。私が得られない部分は、使用できる文字の選択を制限し、上限があることです。
なぜウェブサイトはこれを行うのですか?私が考えることができる唯一のことは、彼らがパスワードをハッシュする基本を知らないということです。それは何よりも安全で、セキュリティ上の懸念を取り除くでしょう。
パスワードとしてDELETE FROM users WHERE 1=1
と入力すると、許可されます。 PHPのMD5ハッシュはfe5d54132b51b7d65ab89b739b600b4b
になり、何も害を及ぼすことはないと思います。
それは彼らのプログラマー(または彼らの管理者)が怠惰で教育を受けていないことに帰着します。システムに文字を受け入れさせるのにそれほど多くの作業は必要ありませんが、SQLインジェクション攻撃、クロスサイトスクリプティング、およびシステムのすべての部分がそれを処理できることを確認することについて考える時間を費やす必要があることを意味します、など。問題になる可能性のある文字を禁止するだけの方が、安価で迅速です。
通常、「拡張文字」の制限は、銀行のプログラミンググループの管理者がCOBOLプログラマーであり、文字セットが難しいことを知っているためです。
銀行が特殊文字を制限しているのは、おそらく 彼らはパスワードをプレーンテキストで保存していますすべきではないことです、そして 彼らは、いくつかの特殊文字がビジネスロジックにリークしてハッキングするのではないかと懸念しています。
文字数の制限については、まだ使用しているメインフレームの一部のソフトウェアでは、それよりも大きいテキストフィールドを処理できないと推測できます。
この決定は、ほとんどのユーザーにとって実用的なものに基づいているようです。プログラマーや技術者とは異なり、オンラインバンキングの多くのユーザーは、まともな長さのパスワードはもちろんのこと、4文字のピンを覚えるのが難しいようです。これは2要素認証のドライバーの1つです。パスワードを生成するデバイスを提供して、デバイスを紛失しないようにする必要があります。
「なぜ特殊文字がないのか」に関しては、それは怠惰ではなく、潜在的な攻撃の状況を減らすことについての賢明な決定です。アポストロフィ、ハッシュ、等号などを許可する場合、入力検証ルーチンがSQLインジェクションの試行をキャッチすることを100%確信する必要があります。たとえば、入力に表示したい文字のみをホワイトリストに登録すると、全体を節約できます。潜在的な損傷の。
原則としてマッテオに同意します。理想的には、パスワードは一方向のハッシュでのみ保存する必要がありますが、これを行うと銀行は顧客を失うため、方法が必要です。多くの場合、メインデータベースに格納されているハッシュに加えて、同じデータベース内、またはこの機能のためだけの個別のパスワードデータベース内に、暗号化されたフィールドがあります。
特殊文字の禁止は理解できますが、パスワードの長さの制限に言い訳はありません。私はパスワードマネージャーを使用しており、途方もなく長いパスワードを使用するのが好きです。それらを覚えたりタイプしたりする必要がないので、なぜですか?
サイトがパスワードの長さを制限する理由は1つだけ考えられます。このサイトを運営している人々は、ユーザーが本当に良いパスワードを使用できるようにすると、パスワードをより頻繁に忘れてしまい、サポートコールや電子メールをさらに数回入力しなければならなくなることを恐れています。それは非常に不十分な言い訳ですが、私が思い付くことができるそのような愚かな政策の唯一の可能な理由です。