如何使此登录系统更安全

时间:2012-02-14 11:07:12

标签: php mysql security login

我创建了这个php登录脚本。我想知道天气是否安全,如果不是,我怎么能改善它。

PHP脚本

<?php
include_once ("ConnectToMySql.php");

session_start();

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

$query = "SELECT password FROM users WHERE username = '$username';";
$result = mysql_query($query);

if(mysql_num_rows($result) < 1)
{
    echo "This Username Is Not Registered!";
exit;
}
if(mysql_num_rows($result) == 1)
{
if ($password == $result)
{
    echo "Logged In!";
}

else echo "Wrong Password!";
}
?>

由于

2 个答案:

答案 0 :(得分:4)

第一个提示可能是显示两个无效登录案例的常见错误:invalid username or password。这样一来,最终的攻击者就不会知道用户名是否有效。

您还可以创建一个与用户名和密码相匹配的查询。您可能需要更多用户信息(存储在会话中?),因此最好选择这些字段而不是密码(例如idname)。

关于存储在数据库中的散列密码,您可以添加SALT以提高安全性。 http://en.wikipedia.org/wiki/Salt_%28cryptography%29

答案 1 :(得分:1)

我要做的是将查询更改为以下内容:

"SELECT COUNT(*) FROM users WHERE username = '$username' AND password='$password';"

这样,您不必在事后检查密码是否正确(并且您也不必传递敏感数据),您只需要检查返回的行数是否等于1并且您可以为用户名/密码生成单个错误消息。

相关问题