CodeIgnighter的数据库是否足以防止SQL注入

时间:2011-08-11 20:34:27

标签: php sql security codeigniter sql-injection

我正在尝试在像here这样依赖于CodeIgnighter数据库API的codeignighter中编写模型。关于CodeIgnighter的数据库API是否完全阻止了SQL注入,我已经阅读了forum post。我知道很多people suggest使用PDO Framework作为阻止SQL注入的最佳方法。我知道如何使用PDO框架但是我不知道如何使用预准备语句在模型中生成查询。我是使用CodeIgnighter的数据库API从SQL注入中节省的,还是应该使用PDO框架?

3 个答案:

答案 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有很多好处。我只是认为安全几乎不是其中之一。