3

現在、友人の Web サイトのコードをアップグレードしていて、ログイン スクリプトで問題が発生しました。を使用して SQL インジェクションを防止しようとしていますmysql_real_escape_string()mysql_escape_string()正常に動作しますが、mysql_real_escape_string()動作しません。これは私が持っているものです:

if (isset($_POST['submit']))
{
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']);

    $db_link = db_connect("project");
    $query = "SELECT * FROM user WHERE username = '$username' AND password = password('$password')";
    $result = mysql_query($query) or die (mysql_error());
    $numrows = mysql_num_rows($result);

    if($numrows == 1)
    {
        RedirectToURL("home.php");
    }
    else
    {
        login_page("Invalid login! Try again");
    }   
}
else
{
    login_page("");
}
4

2 に答える 2

6

mysql_real_escape_string を使用するには、データベースにログインする必要があります。ログインしていない場合は、mysql_escape_string を使用してください。

于 2012-11-04T19:48:36.810 に答える
2

@MichaelBerkowski がコメントで述べたように、mysql_real_escape_string()呼び出しを接続コマンドの先に移動します。

if (isset($_POST['submit']))
{

    $db_link = db_connect("project");

    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']);

    $query = "SELECT * FROM user WHERE username = '$username' AND password = password('$password')";
    $result = mysql_query($query) or die (mysql_error());
    $numrows = mysql_num_rows($result);

    if($numrows == 1)
    {
        RedirectToURL("home.php");
    }
    else
    {
        login_page("Invalid login! Try again");
    }   
}
else
{
    login_page("");
}

上記のように、その理由は、that mysql_real_escape_string()mysql接続が機能するかどうかに依存します

于 2012-11-04T19:55:09.717 に答える