どのような文字がパスワードに許可するために従うべき最良のルールは何ですか?

StackOverflow https://stackoverflow.com/questions/384489

質問

それについて何も考えずには全く私はちょうど私がすべての文字を可能にしなければならないと言いたいです。それは、どのような場合にはハッシュ化されます、と私は強力なパスワードを作成したい人を制限する必要はありません。

しかし、より多くのそれについて考えて、私は彼らは物事の上にあるだろうどのような効果が分からない文字がたくさんあります。外国の文字、ASCII記号などカップルに名前を付けます。

私はGoogleに試みたが、私は人々が何のために任意の決定的な基準を見つけることができません。でも、ほとんどの専門機関は知っていないようです。私が何をしたいだけの愚かとされていない、完全に特殊文字を許可しないように、多くのサイトのための一般的な方法のようです。

とにかく、長さのための任意の標準的な推奨事項があります、などの文字を許可し、?

私はそれが重要かどうかわからないんだけど、私は/ C#

wのASP.NETを使用することがあります
役に立ちましたか?

解決

(33と126までの間の)任意の印刷可能な、非空白文字のASCII文字は、典型的には、パスワードで許可されています。多くのセキュリティ専門家は、(およびSOコメンターは)パスワードの代わりにパスフレーズの使用をアドバイスしていますので、あなたはスペースを許可する必要があると思います。引数は、その長さということで、フレーズが辞書にないので、パスフレーズはパスワードより解読がより困難です。 (正当なユーザーはそれが正しい自分のモニター上でスティッキーノートに書き留めておく必要がないので、パスフレーズも、覚えておくことが容易になることができます。)

いくつかの強力なパスワードジェネレータは、ハッシュを使用ので、私は上の非常に高い制限を置くところ長さ(512または1024)だけ包括的にします。パスワードジェネレータ今日は、多くの場合、32〜128文字の文字列を生成するが、誰が今後数年間で使用されるどのようなハッシュを知っています。

他のヒント

それは限られた機器(携帯電話、コンソールなど)にパスワードを入力することになると非ASCII文字は確かに難しいものを作る - しかし、通常は不可能ではありません。ユーザーがいることをしたい場合はほぼ間違いなく、あなたはそれらを聞かせなければなりません。これは、合理的かつ一貫性のあることを行うために十分に簡単です - 例えば、ハッシュ前にUTF-8でエンコードします。いくつかの入力デバイスは、組成物(例えば、E +急性アクセントの代わりに、「電子の急性」)としての文字を送信した場合にのみ、困難に取得したい - 私はwouldn」トンは、実際の生活の中で起こると思われます。 (あなたはすべてのものを自分で分解することができ、それがエッジケースのために行くために多くの問題になります。)

私は、しかし、の印刷可能なの文字に制限したいです。パスワードには、タブ、フォームをなどフィード置く本当にがトラブルを求めてのです。

はない専門家が、私はその奇妙な選択していない文字が拒否されたときに嫌い。だから、私は私があなたの腸に同意すると思います。

短い答え:それがサポートできるバックアップシステム限り許可します。今日であり、テキスト入力のための完全なUnicodeサポートを使用しない言い訳は本当にません、それはパスワードが含まれています。私はあなたがいる限り、彼らは文字通り扱わしているような文字での問題を心配する必要はないと思います(私はこの分野ではプロじゃない - SQLインジェクションに注意)。

私はパスワードに制限を課すサイトに対するペットpeeveを持っている... の制限のいずれかのようなもの。私は単なるイライラさせられるなど、パスワードがどのように強力なことを教えてくれますサイトが好きで、あなたはそれを強くするお勧めしますが、少なくとも8つの文字を入力するようにユーザーを強制的に、または文字と数字の両方を必要とする。

あなたが(データベースに格納するなど)最大フィールドサイズを持っている必要がある場合は、人々が手で入力し何のために十分に大きくしてみてください。そこに自動化され、生成された強力なパスワードを使用する可能性は常にありますが、64〜128文字は確かに十分であるので、大きすぎるパスワードフィールドのようなものは本当にありません。

基本的に、文字のユニコードクラスのほとんどは許されるべきです。しかし、制御文字(例えば0-31スペース以外)、バイト順マーク(0xFFFEというおよびoxfeff)をスキップしています。さらに、あなたは、異なる表現によって引き起こされる問題を取り除くために第1の表現を正規化します。あなたは入るにはあまりにも難しいように見える文字にかかわらず、警告を出すかもしれませんが、ユーザーはそのに対して自身を守るされます。

注意:あなたがパスワードを保存している場合は、すべてのパスワードは、SHA1のMD5のような一方向アルゴリズムで暗号化されなければなりません。これらのアルゴリズムは常に16進数を得ているので、あなたがそのようなSQLインジェクションや何も心配する必要はありません。

だから、限り、あなたは文字をMD5またはSHA1できるよう、それが受け入れられなければならない。

あなたが攻撃のSQLインジェクションタイプを防止することについて話している場合は、

、かなり問題が容易になるように、入力を制限するに頼るよりも、あなたのコードは、行うことになっているものないことを確認するために、おそらく良いアイデアです。

非ASCII文字については、私はより困難な問題として、あなたの入力が正しく、その後に渡されたバイナリ文字列(とないのテキストのような)、として表すことができるかどうかということが表示されませんなど、あなたのハッシュ関数またはキーの発電機、

「ユーザーが自分のインターフェースがそれらを入力することができます任意およびすべての文字が含まれてみましょう」のための別の投票を追加します。私も、タブや制御文字を禁止していないでしょう。お使いのソフトウェアは、任意のバイトの文字列を受け入れ、それらをハッシュので、パスワードなどの任意のバイトの文字列を受け入れる能力を持っています。それ以外の場合は行うには、攻撃者がブルートフォースや辞書攻撃で検索しなければならないスペースを減らします。

(もちろん、あなたがすべてを許可しない場合でも、ユーザーの99%がまだ彼らのパスワードとして自分のペットの名前を使用します...)

結局、あなたのユーザに送信confirmlation電子メールで明らかにパスワードをプリントアウトする必要があります。

PS:それは標準のASCIIでない場合は、メールに問題をコードするも検討するかもしれない、それは別のシステム上でそれを読むことができないだけで、ユーザーが適切な形式で電子メールを受信しない可能性がありますか(たとえば、日本語の文字を。)インストールされていないフォントが原因ます。

このすべては、 "印刷可能" ASCII文字の範囲で重量を量るます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top