【问题标题】:PHP Filter vs PHP htmlspecialchars vs sqli preparePHP Filter vs PHP htmlspecialchars vs sqli prepare
【发布时间】:2014-06-21 11:07:15
【问题描述】:

我一直很好奇上述预防 sql 注入方法的优缺点。

PHP 过滤器只是检查输入的格式是否正确并返回 true 或 false,您可以选择是否发送到服务器。

PHP htmlspecialchars() 函数将特殊字符转换为等效字符串。

我不完全确定 sqli prepare 是如何工作的,因为我目前对 sql 的了解有限,但我是否正确地假设如果您使用 PHP 过滤器函数和/或 htmlspecialchars 就没有必要?

请注意:如果我都错了,请保持燃烧的建设性,我还在学习 PHP 和 SQL。

【问题讨论】:

  • 这三个做完全不同的事情,因此将它们作为防止 SQL 注入的方法进行比较是不明智或不切实际的:但准备好的语句是防止 SQL 注入的最佳保护,而过滤器用于验证,而 htmlspecialchars纯粹与 html 标记的呈现有关
  • 啊,我明白了,所以我错了,哈哈。谢谢你的澄清。

标签: php html sql


【解决方案1】:

你提到的三件事完全不同,只有一件事与SQL注入有关。

  • 如您所说,过滤器用于验证输入;例如,确保某人没有在电子邮件地址字段中输入电话号码。它们通常与安全无关,只是您需要的数据。
  • htmlspecialchars 转义文本以便在 HTML 中使用,例如,这样可以确保人们无法欺骗您的网站输出 <script> 标记。始终只为您使用它的上下文转义数据很重要,因此您永远不应将 HTML 转义文本存储在数据库中,并始终在实际输出 HTML 时对其进行转义。
  • 准备好的、参数化的语句是防止 SQL 注入的有效保护措施。不是转义每个字符串以防止它作为 SQL 运行,而是将查询与数据完全分离,方法是将查询发送到带有占位符的数据库,其中动态数据将存放在其中。由于数据库知道您传递给“填充”占位符的值是数据,因此攻击者无法欺骗它运行与输入混合的额外 SQL。

【讨论】:

  • 我忘了问mysqli_real_escape_string()。考虑到大部分 sql 语法只是诸如插入和删除之类的词,我认为它与准备好的语句相比不是很有效?
  • 像 htmlspecialchars 一样,它的想法是转义会被特别解释的字符,在这种情况下是在带引号的字符串中 - 所以主要是为了确保其中包含 ' 的字符串不会被解释为字符串的结尾。使用得当,它非常有效,尽管有一些特殊的字符编码的边缘情况,并且很容易错过在长 SQL 字符串中对它的调用,这与从不使用占位符以外的任何东西编写 SQL 的严格政策相反。
  • 请注意,无论是转义还是准备都不会阻止您编写不安全的代码;您需要确保自己没有在错误的地方使用不受信任的数据。
【解决方案2】:

htmlspecialchars(); 将特殊 html 符号转换为特殊字符...

过滤器用于验证数据

准备好的语句有助于保护 sql 注入,因为它们仅用作参数

它们没有附加到查询中

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2011-11-17
    • 2010-10-18
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多