有一个论坛,禁止发布HTML。然而,一些用户希望有可能张贴一些符号,十六进制html实体,如:
💗
请参阅:http://graphemica.com/%F0%9F%92%97了解更多信息。
我的问题是:
- 允许他们使用这样的符号(XSS等)安全吗
- 什么是最好的功能,允许它使用?实际上,符号html实体显示为纯文本
- 我想禁止成员使用
&
或»
等等,所以只允许使用以&#开头的html实体后面跟一个数字加上末尾的分号
知道怎么解决这个问题吗?
另一个答案是使用jQueries.text方法将消息添加到论坛消息元素中。尽管你将不得不改变你的论坛创建消息结构的方式。
您可以安全地添加任何字符序列,浏览器不会将它们解释为HTML。
示例:
$('#message_text').text(naughty_msg_string);
允许他们使用这样的符号(XSS等)安全吗?
不,这永远都不安全。例如,&
只是&
的一个方便的别名,它仍然是一个ampsersand。类似地,<
是一个小于号,因此"天真地"允许数字HTML实体仍然可以打开XSS攻击面,如果您在处理过程中忘记了这一点。
您可以考虑只允许在主ASCII表(128+)之外使用数字符号,这样会更安全。
什么是最好的功能,允许它使用?实际上,符号html实体显示为纯文本。
考虑到上述功能,preg_replace_callback
是一个很好的候选者,因为它允许您在允许之前测试内容
这也回答了第三个问题,因为您可以在regexp中测试数字。