代码之家  ›  专栏  ›  技术社区  ›  dierre

清除HTML字符串并保存一些标记和属性

  •  0
  • dierre  · 技术社区  · 14 年前

    在我实现了我的清理功能(根据要求的细节)之后,我的老板决定更改接受的输入。现在他想保留一些特定的标签及其属性。我建议实现一个类似BBCode的语言,这对imho来说更安全,但他不想这样做,因为这会有很多工作要做。

    这次我想保持简单,这样下次他再让我改变这个东西时我就不会杀了他。我知道他会的。

    strip_tags 使用要保留的标记参数,然后 htmlentities ?

    2 回复  |  直到 14 年前
        1
  •  2
  •   bobince    14 年前

    strip_tags 不一定会导致安全内容。 带标签 htmlentities 这是安全的,因为任何HTML编码的东西都是安全的,但它没有任何意义。

    或者用户正在输入纯文本,在这种情况下,应该使用 htmlspecialchars htmlentities公司 ),或者他们正在输入HTML标记,在这种情况下,您需要正确解析它,修复损坏的标记并删除不在安全白名单中的元素/属性。

    如果这是你想要的,使用现有的库来做它(例如。 htmlpurifier ). 因为这不是一个微不足道的任务,如果你弄错了,你已经给自己的XSS安全漏洞。

        2
  •  0
  •   Chris Laplante    14 年前

    strip_tags 使用以下语法: strip_tags($text, '<p><a>');

    这个片段会去掉除 p a p 在上面的例子中)。

    但是,这并不意味着属性是安全的。他是想要特定的属性,还是想把所有的属性都放在允许的标签上?对于第一种情况,您需要解析每个标记并删除所需的标记,清除这些值。要将所有属性保留在允许的标记上,仍然需要对它们进行清理。我建议你跑步 htmlentities