【问题标题】:PDO in Codeigniter - Protect vs SQL InjectionCodeigniter 中的 PDO - 保护与 SQL 注入
【发布时间】:2011-06-26 12:28:55
【问题描述】:

真正的 PHP 安全专家,PDO 是要走的路还是我可以使用 Codeigniter 的 Active Record 类?

我已阅读 http://codeigniter.com/forums/viewthread/179618/ 并且不是 100% 相信。
我通常会向 Chris Shiflett 和 OWASP 等专家寻求安全提示。 http://shiflett.org/blog/2006/jul/the-owasp-php-top-5

一直在使用自制的 PDO DB 类代替 Codeigniter 数据库文件。每次我上传复制过来都是一个相对较小的痛苦。我使用 PDO 的主要原因是为了防止 SQL 注入而不是使用 Active Record。

编辑:不要成为一个骗子,但我在事后写了一篇关于如何整合的帖子 PDO in Codeigniter。如果有人有反馈,我很乐意听到。

【问题讨论】:

  • 感谢所有出色的答案。每个答案都有一个有效点。我将继续使用 PDO 来实现灵活性、安全性、参数绑定,并且因为我对它有扎实的了解。
  • 我阅读了您的博文。但是经过这些修改后,如何在 CI 中使用 PDO?见How can I use PDO in CodeIgniter 2?

标签: php codeigniter pdo sql-injection prepared-statement


【解决方案1】:

嗯,所有这类问题都有一个通用答案:

这不是魔杖,而是巫师。

(不知道我从哪里得到这句话,但似乎我只是一个使用它的人,但很可能是我拼错了)

技术本身没有好坏之分。
一切都取决于使用它的手。

  1. 如果使用得当,mysql 中没有什么不安全的地方。
  2. PDO 不是一个神奇的盾牌,仅凭它的存在就可以保护你的背部免受所有危险。

每次我看到关于 SQL 注入的蹩脚言论时,总是只讨论动态数据
虽然大多数危险来自其他查询部分 - 例如动态标识符。 PDO 可以做的比 nothing 少一点来处理它们。

所以,不可能有确定的答案。
只要您了解自己在做什么,您就可以使用任何您喜欢的技术。
相反,如果您不了解它的工作原理,而只是相信某些技术可以保护您的应用,那么您已经遇到了麻烦。

就是这样。

【讨论】:

  • 这是一个很好的观点 - 大多数数据库 API 不考虑转义文字名称(表、列等)。我记得几年前当我有兴趣将它移植到 Postgres 时,这是 WordPress 的一个问题 - 每个数据库的转义都是不同的。
【解决方案2】:

根据您引用的页面,Active Record 类使用mysql_ 函数进行字符串转义。这意味着它仍在 PHP 领域构建 SQL 字符串,而不是在数据库中使用参数化 API。虽然它现在可能没有已知缺陷,但使用遵循更安全设计的 API 仍然是一个更好的主意。

【讨论】:

  • 它还限制了对 MySQL 的使用。我原以为 CI 会更灵活
【解决方案3】:

如果您已经对自己的 PDO 库感到满意,那么没有理由停止在 CI 中使用它。如果您想遵循 CI 模式,Active Record 非常棒,但它几乎不是任何意义上的要求。

【讨论】:

    【解决方案4】:

    看看http://codeigniter.com/user_guide/database/queries.html

    最后一节,查询绑定,告诉您可以使用自动转义的查询绑定。

    虽然它不是真正准备好的语句,但它是对相同语句的有效模拟。

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 2016-06-16
      • 2020-08-08
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      相关资源
      最近更新 更多