只允许使用十六进制html实体



有一个论坛,禁止发布HTML。然而,一些用户希望有可能张贴一些符号,十六进制html实体,如:

💗 

请参阅:http://graphemica.com/%F0%9F%92%97了解更多信息。

我的问题是:

  1. 允许他们使用这样的符号(XSS等)安全吗
  2. 什么是最好的功能,允许它使用?实际上,符号html实体显示为纯文本
  3. 我想禁止成员使用&»等等,所以只允许使用以&#开头的html实体后面跟一个数字加上末尾的分号

知道怎么解决这个问题吗?

另一个答案是使用jQueries.text方法将消息添加到论坛消息元素中。尽管你将不得不改变你的论坛创建消息结构的方式。

您可以安全地添加任何字符序列,浏览器不会将它们解释为HTML。

示例:

$('#message_text').text(naughty_msg_string);

允许他们使用这样的符号(XSS等)安全吗?

不,这永远都不安全。例如,&只是&的一个方便的别名,它仍然是一个ampsersand。类似地,<是一个小于号,因此"天真地"允许数字HTML实体仍然可以打开XSS攻击面,如果您在处理过程中忘记了这一点。

您可以考虑只允许在主ASCII表(128+)之外使用数字符号,这样会更安全。

什么是最好的功能,允许它使用?实际上,符号html实体显示为纯文本。

考虑到上述功能,preg_replace_callback是一个很好的候选者,因为它允许您在允许之前测试内容

这也回答了第三个问题,因为您可以在regexp中测试数字。

最新更新