codeigniter $ this-> db-> query()或$ this-> db-> escape()是否会阻止SQL注入?

时间:2018-02-02 02:03:38

标签: php codeigniter security

我想问一下这两种方法$this->db->escape()$this->db->query()

那些可以阻止SQL注入吗?

2 个答案:

答案 0 :(得分:2)

默认情况下query() 除非您使用绑定,否则没有任何注射预防方法。

$this->db->query("SELECT * FROM sometable WHERE column1 = '?'", array($this->input->post('someitem')));

但是,如果您使用查询构建器:get()insert()update()以及任何其他查询构建器方法,则会传入传入的数据除其他外,转义数据的功能。

从表面上看,转义数据是防止SQL注入的一部分,另一部分是准备好的查询(传统的php是使用PDO和预处理语句完成的)。由于查询构建器为您承担了大部分负担,因此我不会过于担心。

在CI中你可以安全地做到:

$item = $this->input->post('someitem');

$this->db->insert('sometable', array('column1' => $item));

插入功能将自动转义$item

您还可以通过$item = $this->input->post('someitem', TRUE);

对帖子进行XSS清理

但是,如果您直接进入query()

应该逃避您的获取/发布信息
$item = $this->input->post('someitem');

$item_esc = $this->db->escape_str($item);

$this->db->query("INSERT INTO `sometable` (`column1`) VALUES ('{$item_esc}')");

答案 1 :(得分:2)

首先,您应该清楚 db->escape() db->query() 的内容。

db->escape()

这适用于使用 Regular Queries 而非 Query Builder Class 的用户。当我们对DB使用直接查询时,存在很高的安全漏洞。因此CI从这些攻击中获得escape() there are 3 methods we can use escape()就是其中之一

db->query()

此方法已添加到 version 1.5.0 ,并且它仍然存在于CI数据库类中,在v1.5 - V3.0中也有重大改进(v4也是如此)。这用于以更好的理解以简单的方式执行 complex queries SP 。此方法 just run a query whatever inside this query() ,并且 没有任何SQL注入预防

escape()可以单独使用吗?

没有。要在CI中使用这些 Escaping methods ,您必须使用query()escape()escape_str()escape_like_str()被添加到SQL查询中,显然他们需要query()来执行任何类型的操作。

那些可以阻止SQL注入吗?

当然可以。他们在那里帮助安全。并阅读 Input Security Filtering post('some_data', TRUE);Security以便更好地理解。