Php 过滤器\u消毒\u字符串正在剥离<;字符及其后的任何文本

Php 过滤器\u消毒\u字符串正在剥离<;字符及其后的任何文本,php,Php,在变量(由人工输入填充)上使用FILTER\u SANITIZE\u STRING时,我遇到了一个奇怪的问题。它似乎会删除字符保持不变 我假设它认为的根本问题是,当您使用过滤器_SANITIZE_字符串剥离HTML标记时,您将输入作为HTML处理。根据您的描述,您的输入是纯文本。因此,正如用户已经报告的那样,过滤器只能损坏输入数据 虽然这似乎是一种非常流行的技术,但我从未理解将纯文本上的HTML标记条带化作为净化方法的概念。如果不是HTML,则不需要关心HTML标记,原因与不需要关心SQL关键字

在变量(由人工输入填充)上使用
FILTER\u SANITIZE\u STRING
时,我遇到了一个奇怪的问题。它似乎会删除
字符保持不变


我假设它认为
的根本问题是,当您使用
过滤器_SANITIZE_字符串
剥离HTML标记时,您将输入作为HTML处理。根据您的描述,您的输入是纯文本。因此,正如用户已经报告的那样,过滤器只能损坏输入数据

虽然这似乎是一种非常流行的技术,但我从未理解将纯文本上的HTML标记条带化作为净化方法的概念。如果不是HTML,则不需要关心HTML标记,原因与不需要关心SQL关键字或命令行命令相同。这只是数据

但是,当然,当您随后将字符串注入HTML时,您需要对其进行转义,以确保:

  • 您的数据按原样显示
  • 结果仍然是有效的HTML

  • 这就是存在的原因。类似地,当您动态生成任何其他类型的代码时,您需要使用相应的转义机制:SQL、JavaScript、JSON…

    根本问题是,当您使用
    过滤器\u SANITIZE\u字符串
    去除HTML标记时,您将输入作为HTML处理。根据您的描述,您的输入是纯文本。因此,正如用户已经报告的那样,过滤器只能损坏输入数据

    虽然这似乎是一种非常流行的技术,但我从未理解将纯文本上的HTML标记条带化作为净化方法的概念。如果不是HTML,则不需要关心HTML标记,原因与不需要关心SQL关键字或命令行命令相同。这只是数据

    但是,当然,当您随后将字符串注入HTML时,您需要对其进行转义,以确保:

  • 您的数据按原样显示
  • 结果仍然是有效的HTML

  • 这就是存在的原因。类似地,当您动态生成任何其他类型的代码时,您需要使用相应的转义机制:SQL、JavaScript、JSON…

    它就是这样做的,为了避免这个结果,不要使用它。您希望它做什么?我希望它通过删除html/php标记来清理字符串,等等。它工作得很好,直到有人向我报告说,<字符及其背后的所有内容都被删除,甚至它是类似于:“Blabla<这是其他文本”,这将导致“Blabla”。这就是它的作用,为了避免这个结果,不要使用它。你希望它做什么?我希望它通过删除html/php标记来净化字符串,等等。这很好,直到有人向我报告说,<字符及其背后的所有内容都被删除,甚至是类似于:“Blabla<这是另一个文本”,这将导致“Blabla”。你说得有道理。我试图保护我的应用程序不受攻击,但我认为完全跳过过滤器\u SANITIZE\u字符串(或strip\u tags())是足够安全的,在将其添加到数据库之前,只需在最后使用htmlspecialchars(),我已经在这样做了。在存储数据之前,我不会应用
    htmlspecialchars()
    。这使得它更难用于任何其他在网站上显示它的东西。我会存储原始数据,并在实际使用时进行转换。按需逃跑的负担几乎不明显,这是有道理的。我试图保护我的应用程序不受攻击,但我认为完全跳过过滤器\u SANITIZE\u字符串(或strip\u tags())是足够安全的,在将其添加到数据库之前,只需在最后使用htmlspecialchars(),我已经在这样做了。在存储数据之前,我不会应用
    htmlspecialchars()
    。这使得它更难用于任何其他在网站上显示它的东西。我会存储原始数据,并在实际使用时进行转换。按需逃逸的负担几乎不明显。