PDO,Prepared语句和SQL

在阅读了几篇关于PDO和MySQLi准备语句的文章之后,他们也已经阅读了关于stackoverflow.com上的准备好的语句和SQL注入的几十个问题,人们说,正确使用准备好的语句不再需要从用户转义条目,但是我想我仍然担心有安全问题。

第一个问题:如果我在准备好的语句中使用reg-exp和escape之前仍然使用它们来处理条目,那么就像我过度使用它?

第二个问题:如果准备好的陈述正在做有关SQL注入的工作 - 从人们的意见和答案 - 为什么仍然存在数据库泄密和越来越多的有关信用卡号码和密码的暴露数据,甚至从“大”已知的网站? 这是否意味着准备好的陈述本身并不那么免疫,或者这是一个完全不同的话题?


如果我在准备好的语句中使用reg-exp和escaping之前仍然使用它们来处理条目,那么就像我过度使用它?

  • 如果你在SQL中删除具有特殊含义的字符,因为它们在SQL中有特殊含义,那么这是浪费(并导致错误地存储O'Donnell女士的姓氏)
  • 如果你正在逃避这些角色,那么你会得到双重编码,这是非常糟糕的,因为你最终会(例如)从Dear Ms. O'Donnell开始发送电子邮件。
  • 如果你确定一个日期是一个明智的日期,那么这只是对数据完整性的合理保护。
  • 如果准备好的陈述正在做有关SQL注入的工作 - 从人们的意见和答案 - 为什么仍然存在数据库泄密和越来越多暴露的有关信用卡号码和密码的数据,甚至从“大”和知名网站侵入帐户? 这是否意味着准备好的陈述本身并不那么免疫,或者这是一个完全不同的话题?

    因为:

  • 并非所有人都使用预先准备的语句
  • 并非每个使用它们的人都正确使用它们
  • 数据库可能通过其他媒介(例如Web服务器中的远程代码执行漏洞或管理用户的SSH帐户中的强力攻击)受到攻击。

  • 如果你正在做它针对SQL安全-是的,它的明显的和无用的矫枉过正。
  • 当然是。 事实上,本土准备的报表只涵盖了一小部分情况,并没有为其他人提供担保。
  • 然而,一般而言,准备好的陈述的想法是一个很好的陈述 - 因此,开发者必须自己照顾其他案例。

    这里是我的解决方案 - 一个为所有内容提供占位符的库,而不仅仅是两个标量数据类型


  • 双重逃脱是错误的,你不需要它。 你只需要传递变量PDO会照顾休息。

  • 攻击网站可能以各种方式完成。 人们并不总是使用准备好的陈述。 可能会有很多像XSS,CSRF这样的攻击,攻击者可能会尝试专注于服务器配置。

    基本上你需要考虑到你可能在数据库中放置的每一个变量

  • 攻击者很聪明,他们试图找到原始的方式来获得数据库。 例如,他们可以将xss放在请求的浏览器标题中,如果您在管理面板中使用显示浏览器xss可能工作的统计信息! 这就是为什么如此重视照顾输入。 PDO很好地完成了这项工作。

    为了确保一切都可以,你应该问自己一个问题:

  • 数据是我得到我想要的数据吗? (使用preg_match)。
  • 它是否反对xss,csrf,sql注入?
  • 看看服务器的php和mysql配置,有时候脚本被其他东西保护而被忘记保护。
  • PDOStatement :: bindValue()有一个名为data_type的参数使用它。 如果你想要字符串使用PDO :: PARAM_STR如果int PDO :: PARAM_INT等。
  • 来自php手册的引用:

    对于将使用不同参数值多次发布的语句,调用PDO :: prepare()和PDOStatement :: execute()可以通过允许驱动程序协商查询计划的客户端和/或服务器端缓存来优化应用程序的性能,元信息,并且通过不需要手动引用参数来帮助防止SQL注入攻击。

    链接地址: http://www.djcxy.com/p/16755.html

    上一篇: PDO, Prepared statements and SQL

    下一篇: prepare() prepared statement (not PDO) prevent SQL