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

强制在动态文本中关闭标记

  •  3
  • Steven  · 技术社区  · 14 年前

    在我的许多网站的许多地方,用户可以通过所见即所得或带标记的纯文本输入格式化文本。当然,这样的输入是针对安全威胁进行清理的,但它不会被去掉标记,也不会被完全实体编码。类似的东西 <p>hello world</p> 最终返回到最终用户 <P>你好世界</P> .

    大多数WYSIWYG都足够聪明,可以在将内容转换为表单之前清理XML,但是手动发布请求、非WYSIWYG文本区域和非JS用户不会受到这种向正确方向拉的影响。所以没有什么可以阻止用户输入 <a href="/"> ,将页面的其余部分转换为链接。

    最好的治疗方法是什么?

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

    无论用户提供什么,都要使用HTML解析器来解析它。当它是一个dom时对其进行清理,然后将dom序列化回HTML,并将body元素的内容(如有必要,解析器将创建一个)作为返回给最终用户的字符串。所有必要的元件都有闭合标签。

        2
  •  0
  •   salchams    14 年前

    如果用户将要发送带有未闭合标记的文本,那么发出警告消息是明智的。

    如果用户想发布单个标记 <br> ,它应该像 <br /> . 或应单独用结束标记关闭 </br> .