我正在尝试在像here这样依赖于CodeIgnighter数据库API的codeignighter中编写模型。关于CodeIgnighter的数据库API是否完全阻止了SQL注入,我已经阅读了forum post。我知道很多people suggest使用PDO Framework作为阻止SQL注入的最佳方法。我知道如何使用PDO框架但是我不知道如何使用预准备语句在模型中生成查询。我是使用CodeIgnighter的数据库API从SQL注入中节省的,还是应该使用PDO框架?
答案 0 :(得分:3)
对CodeIgniter不能说太多,但会以Doctrine为例。假设您要从数据库中获取用户。您可以添加查询条件:
// Correct usage. $user value will be passed as bound parameter to PDO
$query->where('u.username = ?', $user);
或..
// Works fine but should not be used like this and can be exploited if $user was not sanitized/escaped
$query->where("u.username = '$user' ");
同样适用于普通的PDO。
答案是:它可以帮助您,但您仍然需要阅读文档并遵循指南。
答案 1 :(得分:3)
如果你使用内置函数的代码点火器,你就可以了。
这是stackoverflow上的一个链接,它解释了这一点: StackOverflow Question,
使用参数化查询,并按照上面的SO问题中的示例进行操作,您可以安全地进行SQL注入,您可以自己做很多其他事情,只需按照CI最佳实践编写好的代码并使用所有内置的功能
答案 2 :(得分:2)
CI的库可以像mysql_real_escape_string
(或者你喜欢的驱动程序)一样防御sql注入。为什么是这样?因为他们的DB库在所有输入上调用它。它还可以正确地转义所有表名和列名。此外,使用PDO意味着您需要以某种方式使用CI的Active Record语法的重写。
也就是说,PDO有很多好处。我只是认为安全几乎不是其中之一。