在我的许多网站的许多地方,用户可以通过WYSIWYG或带标签的纯文本输入格式化文本。当然,这样的输入会针对安全威胁进行清理,但它不会被剥夺标签,也不会完全实体编码。类似<p>hello world</p>
的内容最终会以<p>hello world</p>
的形式返回给最终用户。
大多数WYSIWYG都足够聪明,可以在将内容转换为表单之前清理XML,但是手动POST请求,非WYSIWYG文本区域和非JS用户不会受到正确方向的影响。因此,没有什么可以阻止用户输入<a href="/">
,将页面的其余部分转换为链接。
最好的方法是什么?
答案 0 :(得分:2)
无论用户提供什么,请使用HTML解析器进行解析。当它是一个DOM时清理它,然后将DOM序列化回HTML,获取body元素的内容(解析器将在必要时创建一个)作为发送回最终用户的字符串。所有必要的元素都将包含结束标记。
答案 1 :(得分:0)
如果用户即将发送带有未关闭标签的文字,那么发出警告信息会很明智。
如果用户想发布单个标签
<br>
,它应该像<br />
一样关闭。或者应单独使用结束标记关闭</br>
。