我一直在使用CodeIgniter开发一个网站的登录库。验证码如下:在PHP和MySQL中腌制
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中的盐从PHP中的数据库中合并,然后再用合并后的值查询数据库。我认为这会加快速度,因为只需要一次数据库访问并且代码少。我也认为这将是同样安全,读最顶级的效应初探这个问题 Salting my hashes with PHP and MySQL但是之后...
首先,你的DBMS(MySQL的)不 并不需要有 加密任何支持哈希值。你可以在PHP端执行所有的 ,这也是你应该做的 。
...我开始怀疑是否有安全问题,我忽视了现货。
这段代码实际上有什么不对吗?
可能重复的[安全散列和咸的PHP密码](http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords) – rook 2010-07-19 19:34:57
我不明白这是怎么回事真正!这些问题是完全不同的。 – j82374823749 2010-07-19 19:44:03
然后它应该被关闭,因为太局部。 – rook 2010-07-19 19:46:09