0

所以,这是我的代码:

$login_user_name = $_POST['login-user-name'];
//salt is declared earlier
$login_user_pword = super_encrypt($_POST['login-user-pword'], $login_salt);     

$login_veri_query = mysql_query("SELECT * FROM zebra_users WHERE username='".$login_user_name."'");

$login_veri_numrows = mysql_num_rows($login_veri_query);

if ($login_veri_numrows != 0) {
    while ($value = mysql_fetch_array($login_veri_query)) {
        if ($value['password'] == $login_user_pword) {
            $login_error .= '<p class="success">Logged in Successfully!</p><br/>';
            $main_error .= '<p class="success">Logged in Successfully!</p><br/>';
            $login_good = true;
            $login_error .= '<script type="text/javascript"> <!-- window.location = "main.php" //--> </script>';
        } else {
            $login_error .= '<p class="warning">Incorrect password, try again.</p><br>';
        }
    }
}
}

如果有一个用户名为“user”,密码为“pword”,并且这些凭据被输入到表单中,“验证”方法将声称密码不正确。

这里有什么问题?

另外,我知道这不是一个很好的登录方式,但我将其用作占位符,直到我使用 cookie,但我不这样做'

4

1 回答 1

1

首先,它很容易受到 sql 注入的影响,因为您没有转义用户名。

其次,您应该将散列密码发送到数据库,并且它应该返回任何用户名和密码散列匹配的用户。这样一来,人们就不能仅仅通过输入错误的密码来强制数据库发送密码哈希。

第三,如果数据库没有返回任何行会发生什么?密码失败的操作应与用户名失败的操作相同。

第四,您应该一直使用 === 来比较密码(尽管您根本不应该使用这种方法)。您不希望空密码匹配 FALSE 或类似的东西。另外,它只是节省资源。

于 2013-02-28T03:56:52.700 回答