gpt4 book ai didi

php - PHP 和 MySQL 中的加盐

转载 作者:行者123 更新时间:2023-11-29 09:18:20 25 4
gpt4 key购买 nike

我一直在使用 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,用PHP将用户输入的密码和数据库中的salt合并起来,然后用合并后的值再次查询数据库。我认为这会加快速度,因为只需要访问一次数据库并且代码更少。我还认为它同样安全,但是在阅读了对此问题的最佳回复后 Salting my hashes with PHP and MySQL ...

First of all, your DBMS (MySQL) does not need to have any support for cryptographic hashes. You can do all of that on the PHP side, and that's also what you should do.

...我开始怀疑是否存在我忽略发现的安全问题。

这段代码实际上有什么问题吗?

最佳答案

本身并没有什么问题。请记住,任何携带未加密/未散列密码的流量都是可疑的。因此,例如,当服务器是远程服务器并且在与该服务器通信时未使用加密时,则又是尝试拦截密码的时刻。另外,如果查询记录在某处(默认情况下,或者因为它们很慢),那么在您经历了不存储明文密码的所有麻烦之后,您将拥有一个纯密码+您在这些服务器日志中使用的盐某处。如果您在自己的代码中私下执行此操作,则不会发生这种情况。

这完全取决于您的偏执程度。还有更容易滥用且经常被遗忘的弊端,例如 session 固定。

关于php - PHP 和 MySQL 中的加盐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3284277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com