2011-07-31 5 views
0

私は自分のウェブサイトのログインシステムを構築していますが、以前は$ _SESSION変数を使用してログインした人を覚えていましたが、今回はクッキーによって記憶させる必要があります。クッキーにはユーザー名とセキュリティコードが保存されます。私はデータベースに保存して、正しいユーザーであることを確認します。私はこれにさまざまなアプローチを見てきましたが、私は完全に安全な文字列を生成したいと思います。PHPでセキュリティ文字列を生成するにはどうすればよいですか?

+0

安全な手段は何ですか?あなたの現在のアプローチに間違っていたらどうしますか?ハッシュされた値をキーとして保存すると、私にとってはうまくいくようです。 –

+0

DBをクラックさせてすべてのパスワードを使用することに心配する人は、次のようにします。1.各ユーザーに塩(ランダムな文字列)を生成する。 2. salt + passwordを複数回ハッシュします(かなりの時間がかかります)。残念ながら、あなたが本当に心配しているのは、誰かが盗聴して、特定の文字列を取得しているということです。そのためにはTLSが必要です。 – bdares

+0

私は既にパスワードの暗号化にMD5を使用していますが、(パスワードの)暗号化されたバージョンをクッキーに表示したくありません。 PHPでMD5の短い文字列(6文字)を生成し、それを代わりにクッキーで使用することは可能でしょうか? –

答えて

4

$_SESSIONは既定で既にCookieを使用しているため、何も変更する必要はありません。 use_cookiesuse_only_cookiesの設定オプションがオンになっていることを確認してください。

0

秘密あなたはそのMD5を計算し、クッキーの中に置くことができ、ランダムな数は、通常、これは私が($塩がユニークな大規模な任意の文字列である)私のアプリケーションの一つのためにそれを行う方法です。

$rnd = mt_rand(0, 0x7fffffff)^crc32($salt)^crc32(microtime()); 

$secret = md5($rnd); 

$ rndをどこかに(おそらくDB内に)保存し、次の$ rndをその値でシフトし、その次の$ rndをDBに保存するたびに、さらに安全にしたい場合は...

+0

変更されていない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

+0

あなたは私のgetMicrotime()があまりにもこのアプリケーションのためにあまりにも大きいです、私はちょうど私の既存のコードからそれをコピーしました。編集して削除しました。 BTW私は新しい$ rndをシフトするために古い$ rndを使用すると、私のコードが特別に安全でない理由をリンクから得ることができませんでした。 – nobody

+0

'mt_rand'の次の出力は、十分な出力を見た後に理論的に予測できます。ランダム性の他のすべての原因は理論上推測が容易であるため、これはアルゴリズム全体が理論上安全でないことになります。 – phihag

0

私は、chrの文字を使用して、文字33から126までを使用します。

この機能は次のようなものです:

$seed = ""; 
for ($i = 1; $i <= 20; $i++) { 
    $seed .= chr(mt_rand(33,126)); 
} 
return md5($seed); 
関連する問題