【发布时间】:2010-07-20 03:52:24
【问题描述】:
我一直在使用 CodeIgniter 为网站开发登录库。验证码如下:
function signin($username, $password)
{
$CI =& get_instance();
$query_auth=$this->db->query('SELECT user_id, banned FROM user WHERE username=? AND password=SHA1(CONCAT(?,salt)) LIMIT 1', array($username, $password));
if($query_auth->num_rows()!=1)
return 2;
else
{
if($query_init->row()->banned==1)
return 3;
else
{
$CI->load->library('session');
$this->session->set_userdata('gauid', $query_auth->row()->user_id);
return 1;
}
}
}
返回值表示成功、失败或禁止。每个用户都有一个唯一的盐存储在数据库中。
最初我从数据库中获取salt,将用户输入的密码和salt从数据库中用PHP组合起来,然后用组合值再次查询数据库。我认为这会加快速度,因为只需要一次访问数据库并且代码更少。我也认为它同样安全,但是在阅读了对这个问题的最高回复之后 Salting my hashes with PHP and MySQL ...
首先,您的 DBMS (MySQL) 不需要任何支持 加密哈希。你可以做所有 在 PHP 方面,那就是 还有你应该怎么做。
...我开始怀疑是否存在我没有发现的安全问题。
这段代码真的有什么问题吗?
【问题讨论】:
-
我不明白这是怎么回事!问题完全不同。
-
那它应该因为过于本地化而关闭。
-
对不起,我不明白你的意思。你能解释一下吗?
-
@briggins5 平均每周有大约 3 个与设置密码有关的问题。如果您认为存在安全问题,那么您应该阅读其中一篇文章,而不是添加更多冗余。