【问题标题】:Escaping data - stripslashes, strip_tags转义数据 - stripslashes、strip_tags
【发布时间】:2010-10-29 20:29:10
【问题描述】:

为什么很多人在字符串上同时使用这两个函数? 我看到很多stripslashes(strip_tags($field));(或其他方式)

strip_tags 还不足以过滤任何 xss 之类的东西吗?

【问题讨论】:

    标签: php html escaping


    【解决方案1】:

    转义数据与strip_tagsstripslashes 无关。这些函数从字符串中过滤某些字符,而“转义”对某些字符进行编码,因此它们不会被浏览器或数据库解释。

    您可以使用strip_tags 删除从浏览器发送到 PHP 的字符串中的 HTML 标记。更好的是,如果您在将数据发送回浏览器时使用htmlspecialchars 转义任何可能分隔标签的字符,您还可以安全地存储相同的数据而无需通过strip_tags

    stripslashes 从字符串中删除斜线,如果启用了“魔术引号”,您只需要担心它。这是早期的遗留问题,当时 PHP 开发人员天真地假设来自浏览器的每条数据都注定要用于数据库,并且不能信任开发人员自己逃离数据库。

    【讨论】:

      【解决方案2】:

      strip_tags 还不足以过滤任何 xss 之类的东西吗?

      不。过滤 XSS 内容的唯一安全方法是 htmlspecialchars(),尽管我看到很多建议另外使用 strip_tags()

      参见例如本题讨论:Is preventing XSS and SQL Injection as easy as does this…

      stripslashes 在这种情况下应该做什么,我不知道。这可能是为了撤消现已弃用的 magic quotes 函数的影响 - 但如果不先检查该特定函数是否已启用,则绝不应应用此方法。

      【讨论】:

        【解决方案3】:

        启用魔术引号时,它会自动转义所有 POST、GET 等变量中的引号。 stripslashes 在您使用数据之前删除那些。剥离标签 尝试 以删除所有 html 标签。

        【讨论】:

          【解决方案4】:

          strip_tags() 本身通常不足以防止 XSS 攻击,因此最好谨慎行事。

          考虑以下几点:

          $str = "' onclick='javascript:alert(0);' alt='";
          echo "<a href='". strip_tags($str) ."'></a>";
          // output is <a href='' onclick='javascript:alert(0);' alt=''></a>
          

          执行 XSS 攻击并不总是需要 HTML 标签。这可能是一种不太有效的攻击,但它仍然是一个潜在的攻击媒介。

          【讨论】:

            【解决方案5】:

            我注意到 strip_tags() 在引号字符中添加了反斜杠。我检查过了,magic_quotes_gpc 没有打开。 OP 最初的问题是为什么一些编码人员用 stripslashes() 包围 strip_tags() ,这就是我这样做的原因,因为我不希望数据库存储双反斜杠,因为无论如何我在将数据保存到数据库之前已经准备好数据。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-12-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-11
              • 1970-01-01
              相关资源
              最近更新 更多