【发布时间】:2015-05-21 23:30:46
【问题描述】:
我一般来说对 PHP 或 Web 安全性不太了解,但我强烈怀疑我工作的公司正在使用的某些软件生成的代码是不安全的。
以下是一些我关心的问题:
第一个问题:
$sql = "SELECT password, fullname FROM ".$mysql_table."
WHERE username = '".mysqli_real_escape_string($db,$_POST['username'])."'";
检索给定用户名的密码然后在 PHP 中比较它们是不好的,还是在查询本身中使用密码更好,如下所示:
... WHERE username = $username AND password = $hashed_password
第二个关注点:
$crypt_pass = md5($_POST['password']);
if ($crypt_pass == $data['password'])
{
//LOGIN SUCCESS
}
使用 md5 散列而不使用盐,够了吗?
第三个关注点:
setcookie('username', $_POST['username'], time() + 3600*24*30);
setcookie('password', $_POST['password'], time() + 3600*24*30);
将纯文本/文本用户名和密码存储在 cookie 中是个好主意吗?
这些代码是否不安全,如果是,应该怎么做?
【问题讨论】:
-
您是否以明文形式存储密码?如果是这样,那绝对是一个问题! :P
-
MD5 不应用于存储密码。
-
没有盐吗?有大量字符串的预先计算的哈希值,这使得进行查找变得微不足道。
-
关于第三个问题,永远不要在任何地方存储明文密码,尤其是在 cookie 中!
-
我会担心密码没有加盐,并且正在使用 MD5。第三个问题是最可怕的......简单地传递一个用户名和密码对(这是明文密码吗?)?这是通过 HTTP 的吗(请拒绝)。