1

以下のコードは、PHP で記述されたログイン スクリプトからのものです。パスワードをチェックするデータベースは、MD5 を使用してパスワードを暗号化しますが、ログイン スクリプトがデータベースのパスワードをチェックするときは、暗号化されていない未加工のパスワードをチェックしています。私は md5() 関数に精通していますが、それを次のように組み込むにはどうすればよいですか。

<?php
session_start();

$username = $_POST['username'];
$password = $_POST['password'];

if ($username && $password) {
    $connect = mysql_connect("host", "user", "password") or die("Couldn't connect");
    mysql_select_db("dbname") or die("Couldn't find the database");

    $query = mysql_query("SELECT * FROM users WHERE username='$username'");
    $numrows = mysql_num_rows($query);

    if ($numrows != 0) {
        while ($row = mysql_fetch_assoc($query)) {
            $dbusername = $row['username'];
            $dbpassword = $row['password'];
        }

        if ($username == $dbusername && $password == $dbpassword) {
            echo "You're in! Click <a href='../member.php'>here</a> to enter the member page.";
            $_SESSION['username'] = $username;
        }else{
            echo "Incorrect password";
        }
    }else{
        die("That username does not exist.");
    }
}else{
    die("Please enter a valid username and password.");
}
?>
4

2 に答える 2

5

結果をダウンさせてローカルでチェックするのではなく、一致するかどうかデータベースをチェックしてクエリする必要があります。とは言うものの:

$password = md5($_POST['password']);

次に、次のようにも変更します。

SELECT * FROM users WHERE username='$username' AND password='$password'

しかし、値を SQL クエリに直接配置する代わりに、PDOを使用することも検討したいと思います。少なくとも、mysql_real_escape_stringインジェクション攻撃を回避するために使用する必要があります。

于 2012-10-01T00:13:03.793 に答える