私は自分のウェブサイトのログインシステムを構築していますが、以前は$ _SESSION変数を使用してログインした人を覚えていましたが、今回はクッキーによって記憶させる必要があります。クッキーにはユーザー名とセキュリティコードが保存されます。私はデータベースに保存して、正しいユーザーであることを確認します。私はこれにさまざまなアプローチを見てきましたが、私は完全に安全な文字列を生成したいと思います。PHPでセキュリティ文字列を生成するにはどうすればよいですか?
答えて
$_SESSION
は既定で既にCookieを使用しているため、何も変更する必要はありません。 use_cookies
とuse_only_cookies
の設定オプションがオンになっていることを確認してください。
秘密あなたはそのMD5を計算し、クッキーの中に置くことができ、ランダムな数は、通常、これは私が($塩がユニークな大規模な任意の文字列である)私のアプリケーションの一つのためにそれを行う方法です。
$rnd = mt_rand(0, 0x7fffffff)^crc32($salt)^crc32(microtime());
$secret = md5($rnd);
$ rndをどこかに(おそらくDB内に)保存し、次の$ rndをその値でシフトし、その次の$ rndをDBに保存するたびに、さらに安全にしたい場合は...
変更されていないMersenne-Twisterは[暗号では保護されていません](http ://en.wikipedia.org/wiki/Pseudorandom_number_generator#Mersenne_Twister);セッションIDの生成などの暗号化アプリケーションには使用しないでください。また、 'getMicroTime'は' return microtime(true); 'で実装する必要があります。また、MD5は[重大に侵害されている](http://en.wikipedia.org/wiki/MD5#Security)。幸いにも、これらの問題はすべて理論的なものです。アルゴリズムは最も危険な攻撃者以外のすべての攻撃者(2011年)に対して安全です。 – phihag
あなたは私のgetMicrotime()があまりにもこのアプリケーションのためにあまりにも大きいです、私はちょうど私の既存のコードからそれをコピーしました。編集して削除しました。 BTW私は新しい$ rndをシフトするために古い$ rndを使用すると、私のコードが特別に安全でない理由をリンクから得ることができませんでした。 – nobody
'mt_rand'の次の出力は、十分な出力を見た後に理論的に予測できます。ランダム性の他のすべての原因は理論上推測が容易であるため、これはアルゴリズム全体が理論上安全でないことになります。 – phihag
私は、chrの文字を使用して、文字33から126までを使用します。
この機能は次のようなものです:
$seed = "";
for ($i = 1; $i <= 20; $i++) {
$seed .= chr(mt_rand(33,126));
}
return md5($seed);
- 1. PHPで長さがランダムな文字列を生成するにはどうすればよいですか?
- 2. PHP文字列値をアンドロイド文字列値に変換するにはどうすればよいですか?
- 3. AppleScriptでは、クリップボードに文字列のMD5ハッシュを生成するにはどうすればよいですか?
- 4. 複数行の文字列から配列を生成するにはどうすればよいですか?
- 5. 文字列の順列を生成するランタイムを減らすにはどうすればよいですか?
- 6. Javaで擬似ランダム "可読"文字列を生成するにはどうすればよいですか?
- 7. PHPで文字列オブジェクトの配列を作成するにはどうすればいいですか?
- 8. 文字列内の文字列を文字列内で渡すにはどうすればよいですか?
- 9. 文字列の長いハッシュを生成するにはどうすればよいですか?
- 10. Java:文字列からPrivateKeyを生成するにはどうすればよいですか?
- 11. 文字列からランダムな文字を作成するにはどうすればよいですか?
- 12. 接続文字列はどうすればよいですか?
- 13. C#で文字列をPascalCase文字列に変換するにはどうすればよいですか?
- 14. 文字列/数字を文字列に追加するにはどうすればよいですか?
- 15. 文字列配列で各文字に個別にアクセスするにはどうすればよいですか?
- 16. PHPで文字列を日付に変換するにはどうすればよいですか? C#ので
- 17. テキストファイルからJava文字列に文字列をコピーするにはどうすればよいですか?
- 18. 文字列内の\文字を/文字に変更するにはどうすればよいですか?
- 19. 文字列リテラルで文字列補間を使用するにはどうすればよいですか?
- 20. PHP:配列に文字列を含む文字列があるかどうかを調べるにはどうすればよいですか?
- 21. 文字列を「トリミング」するにはどうすればよいですか?
- 22. 文字列値で列挙型のオブジェクトを作成するにはどうすればよいですか?
- 23. 出力にランダムに生成する文字を取得するにはどうすればよいですか?
- 24. 文字列から文字列を抽出するにはどうすればよいですか?
- 25. 部分文字列を文字列から削除するにはどうすればよいですか?
- 26. Cの文字配列から文字列を取得するにはどうすればよいですか?
- 27. PHPで文字列に変数を使用するにはどうすればよいですか?
- 28. PHPで文字列内のリンクに単語を変換するにはどうすればよいですか?
- 29. iOSで通知文字のような時間の文字列を生成するにはどうすればよいですか? iOSの
- 30. C++/Arduino:文字列/文字配列をバイトに変換するにはどうすればよいですか?
安全な手段は何ですか?あなたの現在のアプローチに間違っていたらどうしますか?ハッシュされた値をキーとして保存すると、私にとってはうまくいくようです。 –
DBをクラックさせてすべてのパスワードを使用することに心配する人は、次のようにします。1.各ユーザーに塩(ランダムな文字列)を生成する。 2. salt + passwordを複数回ハッシュします(かなりの時間がかかります)。残念ながら、あなたが本当に心配しているのは、誰かが盗聴して、特定の文字列を取得しているということです。そのためにはTLSが必要です。 – bdares
私は既にパスワードの暗号化にMD5を使用していますが、(パスワードの)暗号化されたバージョンをクッキーに表示したくありません。 PHPでMD5の短い文字列(6文字)を生成し、それを代わりにクッキーで使用することは可能でしょうか? –