仅允许十六进制html实体

时间:2014-09-28 10:40:27

标签: php html html-entities hex

有一个论坛,发布HTML是被禁止的。 但是,有些用户希望有可能发布一些符号标志,十六进制html实体,例如:

💗 

有关详细信息,请参阅:http://graphemica.com/%F0%9F%92%97

我的问题是:

  1. 根本不允许使用这些符号(XSS等)吗?
  2. 允许使用的最佳功能是什么?实际上,符号html实体显示为纯文本。
  3. 我想禁止使用&»等的成员,所以只是以&#开头的html-entities,后跟一个数字加上最后的分号。
  4. 知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

另一个答案是使用jQueries .text方法将消息添加到论坛消息元素。 虽然您必须更改论坛创建消息结构的方式。

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

示例:

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

答案 1 :(得分:0)

  

这样可以安全地使用这些符号(XSS等)吗?

不,这绝不安全。例如,&只是&的一个方便的别名,它仍然是一个放大器。同样地,<是一个小于号的符号,因而是“天真地”。如果在处理过程中忘记了这一点,那么允许数字HTML实体仍可以打开XSS攻击面。

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

  

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

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

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