这是我的模型,我正在查询数据库,检索我需要的数据库,然后进行比较。除了查询不是将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/

10-13 02:51