"John", "age 30, "status" => "a-6ren">
gpt4 book ai didi

php - 这是 Codeigniter 事件记录中的错误吗?

转载 作者:可可西里 更新时间:2023-11-01 13:00:08 27 4
gpt4 key购买 nike

如果我使用 codeigniter 事件记录从这样的数据库表中获取数据:

$where = array("first_name" => "John", "age <" => 30, "status" => "active");
$this->db->where($where);
$query = $this->db->get("my_table");

die(var_dump($this->db->last_query())); // displays the query string

此代码将生成以下查询字符串:

SELECT * FROM (`my_table`) WHERE `first_name` = 'John' AND `age` < 30 AND `status` = 'active'

现在,如果我将字符串分配给 $where 而不是数组,如下所示:

$where = "first_name = 'John' AND age < 30 AND status = 'active'";

然后它将产生以下查询字符串:

SELECT * FROM (`my_table`) WHERE `first_name` = 'John' AND age < 30 AND status = 'active'

请注意,将字符串分配给 $where 时,codeigniter 添加了 backticks (``)仅围绕第一个字段的名称,在我们的例子中是 first_name。另一方面,当我们将数组分配给 $where

时,codeigniter 在所有字段名称周围添加了反引号

我的问题:这是 codeigniter 中的错误还是正常现象?如果我使用以下代码来防止 codeigniter 在字段名称周围添加反引号:

$this->db->where($where, null, false);

这将产生以下查询字符串:

SELECT * FROM (`my_table`) WHERE first_name = 'John' AND age < 30 AND status = 'active'

以这种方式编写 where 部分是否有任何风险或缺点?

最佳答案

问:这是 codeigniter 中的错误还是正常现象?

  • 是的,这是一个错误,但并不严重。

问:写 $this->db->where($where, null, false) 有什么风险或缺点吗?

此代码本身没有风险。如果您在 WHERE 子句中进行硬编码,那么可能永远不会出现问题。唯一会出现问题的是当您捕获用户输入时,例如表单或 URL,而这将是您必须手动清理的内容

清理 where 子句非常重要。

错误示例:易受 SQL 注入(inject)攻击

$fname  = $_POST['fname']; 
$age = $_POST['age'];
$status = $_POST['status'];

$where = sprintf("first_name = '%s' AND age < %d AND status = '%s'",$fname,$age,$status);
$this->db->where($where, null, false);

更好的例子:不那么脆弱

$fname  = (string) mysql_real_escape_string($_POST['fname']);
$age = (int) $_POST['age'];
$status = (string) mysql_real_escape_string($_POST['status']);

$where = sprintf("first_name = '%s' AND age < %d AND status = '%s'",$fname,$age,$status);
$this->db->where($where, null, false);

到目前为止你所做的一切都没有错,它只会给你带来更多的负担来清理你的 where 子句,因为使用 $this->db->where($where, null, false) 将删除内置卫生。

简而言之:使用此方法,如果您的 where 子句将提供用户输入,则最初会使您更容易受到 SQL 注入(inject)攻击。但没有什么是您无法通过一些卫生功能快速收紧的。

我知道这个答案非常完美,但希望对您有所帮助。

关于php - 这是 Codeigniter 事件记录中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20838642/

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