2012-03-21 138 views
1

你好,我目前在Jeffrey Way的Codeigniter教程的第2天。在这个截屏,他说,在下面基本了解防止sql注入codeigniter

$sql = "SELECT title, author, contents FROM data 
    WHERE id = ? AND author = ?"; 
    $q= $this-> db-> query($sql, array(1,'jeffrey')); 

线,如果用户输入什么有趣的地方“杰弗里”应该是,然后它会自动逃跑,防止SQL注入攻击。

这是因为codeigniter有自己的查询()参数验证?或者一般情况下,绑定值到?防止一般的SQL注入?

(基本的了解我有SQL注入的是,你可以键入“杰弗里和删除表的内容”会杀死表好看多了,或运行其他不良的mysql命令)

回答

0

笨是好笑它如何参数化查询。就在昨天,我们在此同样讨论和大量关于这个问题的有用的知识都可以从这个帖子收集:CodeIgniter PDO driver uses query instead of prepare? Isn't this less secure?

的CodeIgniter的文档称之为Query Bindings,有这样一段话吧:

使用绑定的第二个好处是这些值会自动转义,从而产生更安全的查询。您不必记住手动转义数据;引擎会自动为你做。

实质上,我相信它是PDO :: query()的包装器,它在过滤器输入过程中提供正确的转义和引用,然后才能进行调用。

0

笨逃脱你传递变量通过何时使用$ this-> db-> query方法。但只有当你将变量作为绑定传递时,就像你在问题中提到的那样。

CodeIgniter会识别你的变量是什么类型的数据,并相应地包装它。也就是说,如果它是一个字符串,它会将''围绕SQL中的转义值,这是您需要确保用户无法注入任何恶意内容。

希望帮助

+0

这是*实际* CI做了什么?为什么不使用正确的参数绑定? – Phil 2012-03-21 04:25:10