我一直在使用 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;
}
}
}
返回值表示成功、失败或禁止。每个用户都有一个存储在数据库中的唯一盐。
最初我从数据库中获取盐,在 PHP 中将用户输入的密码和数据库中的盐结合起来,然后用组合值再次查询数据库。我认为这会加快速度,因为只需要一次访问数据库并且代码更少。我还认为它同样安全,但是在阅读了对这个问题的最高回复后, 用 PHP 和 MySQL 腌制我的哈希......
首先,您的 DBMS (MySQL) 不需要任何对加密哈希的支持。您可以在 PHP 端完成所有这些工作,这也是您应该做的。
...我开始怀疑是否存在我没有发现的安全问题。
这段代码实际上有什么问题吗?