我刚发现这个,我使用MySQL作为我的数据库。
当我做类似的事情时:
$query = $this->db->where('id', '6rubbish')->get('posts', 1);
它生成并执行此SQL:
SELECT *
FROM (`posts`)
WHERE `id` = '6rubbish'
LIMIT 1
令人惊讶的是,它实际上是使用ID 6 获取帖子。
我发现在相同的情况下这非常容易受到攻击,因为我正在尝试与ID完全匹配,而不是进行LIKE查询。
有什么想法吗?
答案 0 :(得分:2)
是。
但问题的根源是你的查询生成器库不理解变量类型,PHP是一种动态类型语言也无济于事。
我不知道你正在使用什么库,也许有一个选项告诉你传递了一个int?它应该保护你免受SQL注入,我希望,尝试:
$query = $this->db->where('id', "don't")->get('posts', 1);
并查看生成的SQL是否具有单引号转义(加倍或以反斜杠开头)。
答案 1 :(得分:0)
这是因为SELECT 6 = '6rubbish'
会给你真实的,而你的身份证号码是数字类型。
答案 2 :(得分:0)