【问题标题】:Allow only hexadecimal html entities仅允许十六进制 html 实体
【发布时间】:2014-11-22 21:52:14
【问题描述】:

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

💗 

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

我的问题是:

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

知道如何解决这个问题吗?

【问题讨论】:

  • 发布 html 实体绝对不是问题。我只想写一个正则表达式来替换所有与&#\d+; 序列不匹配的序列中的&。
  • @bwoebi 您能否提供一个完整的示例作为答案?猜你说的是 preg_replace,对吧?
  • 问题中的例子不是十六进制实体;此类实体具有字母x(或X)。
  • 关于问题1:“安全”在什么意义上?关于问题 2:“最佳”的标准是什么? 3不是问题。此外,该问题没有描述现在如何处理用户输入,因此我们无法知道添加的规则将如何拦截处理。如果您想让用户输入特殊字符,这似乎是这里的意图,请考虑为此添加一个小部件。

标签: php html html-entities hex


【解决方案1】:

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

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

例子:

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

【讨论】:

    【解决方案2】:

    允许他们使用这些符号(XSS 等)是否安全?

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

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

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

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

    这也回答了第三个问题,因为您可以只测试正则表达式中的数字。

    【讨论】:

    • 这就是为什么我只要求十六进制字符,后面应该有六个数字。您能否也提供一个 $string 示例的答案以便更好地理解?
    猜你喜欢
    • 2014-05-24
    • 2011-11-20
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多