2011-04-10 95 views
0

我需要检查这些值是否相同。如果$_POST['password'] = PASS而不是pass它将返回0行。检查密码值是否相同

此脚本应该回显1或0.它的工作正常,但我想使它更安全。

$_POST['username'] = 'admin'; 
$_POST['password'] = 'pass'; 
    mysql_connect('localhost', '', ''); 
    mysql_select_db('database'); 
    echo $num = mysql_num_rows(mysql_query("SELECT username,password FROM users WHERE username = '". mysql_real_escape_string($_POST['username']) . "' AND password = '". mysql_real_escape_string($_POST['password']) . "'")); 

回答

7

如果你想让它更安全,你根本不应该在数据库中以纯文本存储密码。存储密码的散列(例如MD5或SHA1),优选地添加了盐,然后将其与每次输入的密码的散列进行比较是更好的方法。

对于您的查询,它听起来像你想让它区分大小写。为此,需要将密码列上的排序规则更改为区分大小写的排序规则。这些是以_cs结尾的排序规则,如latin1_general_cs。

1

MySQL不区分不同情况,这就是为什么PASS == pass。您可以通过将列类型设置为BINARY来规避这种情况。除此之外,千万不要将密码明文存储在数据库中,而是使用sha或md5。