2011-12-28 27 views
1

PHPでパスワードを操作する正しい方法を考え出すことができないようです。私はハッシングと使用して塩を、それは保存に来るとき、私は私はいくつかのユーザーが^!@#$%」とパスワードを使用すると仮定しているダウンPHP:特殊文字を含むパスワード

stripslashes(mysql_real_escape_string($_POST["password"])); 

基本的なパスワードを取得しようとしていますよ。 .. "など 私は<b>lulz</b>"u'mad?のようなパスワードを使用しているユーザーを想像することができます。

これらの特殊文字をパスワード変数に含めるにはどうすればよいですか?

+2

HTMLとして再出力されないデータには、ストライプスラッシュを使用しません。 –

+5

あなたはそれに心配するべきではありません。元の値を塩でハッシュしてください。 –

+2

ハッシュする前に* anything *を入力する必要はありません。 –

答えて

5

ここでエスケープやストリッピングを行う必要はありません。 *$hashed = my_favourite_hash($_POST["password"] . $salt)のようなものは問題ありません。 任意の正常ハッシュ関数は、エスケープする必要のない英数字の文字列を返す必要があります。とにかく

、あなたのSQLクエリのために準備されたステートメントを使用しなければならないので、SQLインジェクションの見込みなどはありません


*「あなたはmagic quotesが有効になっていない(そしてあなたが本当にshouldnと仮定すると、 t!)。

my_favourite_hashの優先ハッシュ関数をここに置き換えてください。

+3

私はサブテキストが「{hash_algo}は安全ではありません!!」と警告していました。コメントを入力します。良いコール:) –

+2

stripslashes()とmysql_real_escape_string()のポイントは、データ以外のものと間違える可能性のある何かをクエリに渡さないようにすることです。ハッシングは、それを厳密に文字列データに変換するものでなければなりません。 – Chris

+1

@Madmartigan:はい、私はこの答えを将来的に証明しています... –

3

パスワードをプレーンテキスト形式で保存すると、非常に危険です。代わりに、そのパスワードのハッシュをデータベースに保存する必要があります。パスワードがハッシュされている場合、その文字には制限がありません。

上記のハッシュを作成するには、crypt()機能を使用することをお勧めします。好ましくは、SHA512またはBLOWFISHアルゴリズムを使用する。

また、私は(非推奨されているプロセスである)古代mysql_*機能の使用を停止し、準備された文でPDOまたはMySQLiを活用する方法を学ぶためにあなたのためをお勧めします。

関連する問題