您好我目前正在Jeffrey Way的Codeigniter教程的第2天。在这个截屏视频中,他说在下面的行中
$sql = "SELECT title, author, contents FROM data
WHERE id = ? AND author = ?";
$q= $this-> db-> query($sql, array(1,'jeffrey'));
如果用户输入任何有趣的“jeffrey”应该是什么,那么它将被自动转义,防止sql注入。
这是因为codeigniter在query()参数中有自己的验证吗?或者一般来说绑定值是?一般来说会阻止sql注入吗?
(我对SQL注入的基本理解是你可以键入“jeffrey AND DROP TABLE contents”会杀掉表,或者运行其他糟糕的mysql命令)
答案 0 :(得分:0)
使用$ this-> db->查询方法时,CodeIgniter会转义您传递的变量。但是,只有当您将变量作为绑定传递时,就像您在问题中提到的那样。
CodeIgniter将识别您的变量是什么类型的数据,并相应地包装它。也就是说,如果它是一个字符串,它会将'
和'
放在SQL中的转义值周围,这就是确保用户无法注入恶意内容所需的内容。
希望有所帮助
答案 1 :(得分:0)
CodeIgniter很有趣它是如何进行参数化查询的。就在昨天,我们也在讨论这个问题,并且可以从这篇文章收集关于这个主题的大量有用知识:CodeIgniter PDO driver uses query instead of prepare? Isn't this less secure?
CodeIgniter文档将其称为 Query Bindings ,并对此进行说明:
使用绑定的第二个好处是值会自动转义,从而产生更安全的查询。你不必记得手动逃避数据;引擎会自动为您完成。
本质上我认为它是PDO :: query()的包装器,可以在进行调用之前过滤输入,提供正确的转义和引用。