1

ユーザーを含む既存のデータベースがあり、各ユーザーのパスワードはMD5ハッシュとして保存されます。

PHPを使用してログインフォームを作成しようとしていますが(これも非常に新しいです)、それを機能させることができないようです。ユーザー名とパスワードが正しいことはわかっていますが、それでも間違っているというエラーが表示されます。テーブルのユーザー名を確認する前にMD5にパスワードを入力しますか?

私は現在持っています...

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";

パスワードをエコーすると、ハッシュではなくテキストとして出力されます

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
4

3 に答える 3

1

DBにあるものと比較する前にパスワードをハッシュすることに加えて、実際にはそのパスワードハッシュに「ソルト」を追加する必要があります。この「ソルト」は、パスワードに連結するランダムな任意の文字列にすぎず、ハッシュされたパスワードを「一意」にします。つまり、md5( '12345')が文字列'A'であることが誰かにわかっている場合、このソルトにより、ユーザーのパスワード'12345'がDBの文字列'B'になります。したがって、部外者はそれらを非常に簡単に識別することができません。したがって、適切な「ソルト」を追加してmd5()を呼び出すカスタム関数myHashMD5()を使用してパスワードをハッシュすることをお勧めします。さらに、mysqlでは、文字列を=ではなくLIKE演算子と比較する必要があります。また、関数http://php.net/manual/en/functionを使用します。SQLインジェクションを回避するためであり、コードはSQLインジェクションに対して脆弱です。

于 2012-10-09T19:48:10.123 に答える
0

パスワードのハッシュをデータベースに保存されているハッシュと比較する必要があります。

$hashedPassword = md5($password);
于 2012-10-09T19:32:21.387 に答える
0

この行をコードのすぐ隣に追加するだけです$mypassword=$_POST['mypassword'];

$mypassword = md5($mypassword);
于 2012-10-09T19:35:09.770 に答える