这是我的模型,我正在查询数据库,检索我需要的数据库,然后进行比较。除了查询不是将salt视为列名,而是将其视为字符串,这很好,除了将salt视为字符串,而不是数据库中的数据。我该如何解决?
function login($username, $password) {
$this->db->query("SELECT firstname, username, password, salt FROM table_name WHERE username='$username' AND password = 'sha1(salt.$password'");
$this->db->limit(1);`
$query = $this->db->get();
if($query->num_rows() == 1) {
return $query->result(); //Data is true
} else {
return false; //Data is false
}
}
最佳答案
这里有一些事情在起作用。首先,您将'
添加到哈希中。 SQL中的第二个串联不使用.
运算符。请尝试以下操作:
SELECT firstname, username, password, salt
FROM table_name
WHERE username='$username'
AND password = sha1(CONCAT(salt,'$password'))
请确保正确清理
$username
和$password
,否则您很容易进行SQL注入。更好的方法是使用预准备语句。不确定如何在CodeIgniter中完成此操作,但可以在此处查看信息:How can I prevent SQL injection in PHP?编辑:查询绑定将在CodeIgniter https://ellislab.com/codeIgniter/user-guide/database/queries.html中完成此工作
关于php - 从数据库检索Salt时如何在Codeigniter中使用带有密码的Salt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26294762/