我刚刚发现这个,我使用MySQL作为我的数据库。
当我做这样的事情时:
$query = $this->db->where('id', '6rubbish')->get('posts', 1);它生成并执行以下SQL:
SELECT *
FROM (`posts`)
WHERE `id` = '6rubbish'
LIMIT 1令人惊讶的是,它实际上用ID 6获取帖子。
在相同的情况下,我发现这种情况非常脆弱,因为我试图与ID完全匹配,而不是执行类似的查询。
有什么想法吗?
发布于 2011-10-11 16:40:48
是。
但是问题的根源在于您的查询生成器库不了解变量类型,PHP作为一种动态类型化语言也没有帮助。
我不知道您使用的是哪个库,也许有一个选项可以告诉您正在传递一个int?我希望它可以保护您免受SQL注入的影响:
$query = $this->db->where('id', "don't")->get('posts', 1);并查看生成的SQL是否有单引号转义(加倍或前面有反斜杠)。
发布于 2011-10-11 16:44:27
https://stackoverflow.com/questions/7729465
复制相似问题