【问题标题】:Is CodeIgnighter's Database Library Enough to Prevent Against Sql InjectionsCodeIgnighter 的数据库库是否足以防止 Sql 注入
【发布时间】:2011-10-25 08:06:09
【问题描述】:

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

【问题讨论】:

    标签: php sql security codeigniter sql-injection


    【解决方案1】:

    如果你使用内置函数的代码点火器,你会没事的。

    这里有一个关于 stackoverflow 的链接,可以更详细地说明这一点: StackOverflow Question,

    使用参数化查询,并遵循上述 SO 问题中的示例,您将不会受到 SQL 注入的影响,您自己也无能为力,只需遵循 CI 最佳实践并使用所有内置的代码编写好的代码功能。

    【讨论】:

      【解决方案2】:

      关于 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。

      所以答案是:它可以帮助你,但你仍然需要阅读文档并遵循指南。

      【讨论】:

        【解决方案3】:

        CI 的库与mysql_real_escape_string(或任何您喜欢的驱动程序)一样可以很好地防御 sql 注入。为什么是这样?因为他们的数据库库在所有输入上调用它。它还正确地转义了所有表名和列名。此外,使用 PDO 意味着您需要以某种方式重写 CI 的 Active Record 语法。

        也就是说,PDO 有很多好处。我只是不认为安全实际上是其中之一。

        【讨论】:

          猜你喜欢
          • 2016-02-19
          • 2017-09-24
          • 1970-01-01
          • 2010-10-28
          • 2011-10-16
          • 1970-01-01
          • 1970-01-01
          • 2012-07-30
          • 1970-01-01
          相关资源
          最近更新 更多