在codeigniter中防止sql注入的基本理解

时间:2012-03-21 04:00:52

标签: php codeigniter

您好我目前正在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命令)

2 个答案:

答案 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()的包装器,可以在进行调用之前过滤输入,提供正确的转义和引用。