【问题标题】:What Unicode characters are dangerous?哪些 Unicode 字符是危险的?
【发布时间】:2011-11-04 01:19:11
【问题描述】:

哪些 Unicode 字符(更准确地说是代码点)是危险的,应该被列入黑名单并禁止用户使用? 我知道 BIDI 覆盖字符和“零宽度空间”很容易出问题,但是还有什么其他的呢?

谢谢

【问题讨论】:

  • 可以在布局中产生问题(如 BIDI 字符),发布空 cmets 之类的东西
  • 这些对我来说听起来并不危险。有时你只需要小心处理:“希伯来字母是 אָלֶף־בֵּית עִבְרִי,从右到左书写。”
  • 你不能阻止人们发布“空”的 cmets,你知道的。
  • 我听说如果你转身 U+2423 会试图刺伤你。
  • @CatPlusPlus 实际上是 U+1F0AB,尤其是在 U+100CB 之后。

标签: unicode character sanitization blacklist


【解决方案1】:

字符并不危险:只有不恰当的使用才是危险的。

您可以考虑阅读以下内容:

不可能猜到你说的危险是什么意思。

【讨论】:

    【解决方案2】:

    安全方面的黄金法则是whitelist 而不是黑名单,而不是试图覆盖所有不良字符,在确保用户仅使用已知良好字符的基础上进行验证是一个更好的主意。

    有一些解决方案可以帮助您构建国际白名单所需的大型白名单。例如,在.NET 中有UnicodeCategory

    这个想法是,库不是将数千个单独的字符列入白名单,而是将它们分配到类别中,例如字母数字字符、标点符号、控制字符等。

    Tutorial on whitelisting international characters in .NET

    Unicode Regex: Categories

    【讨论】:

    • 是的,我知道这样会更安全。但与此同时,实际上有数千个 Unicode 字符(对于那里的许多语言),我不能将它们都列入白名单。如果我这样做了,我可能会遗漏许多语言,所以我更喜欢黑名单
    • 有一些解决方案可以帮助您建立白名单,我已经更新了一篇在 .NET 中处理此问题的文章。我想 JAVA 也必须有这个库。
    • 有趣.. 我认为这么大的白名单完全没有效率。我会查查的。可惜我用的是 PHP
    • 好吧,用 PHP 至少你有可以容忍的正则表达式。
    • 黄金法则是纵深防御。如果您可以使用范围将其列入黑名单,请在列入白名单之前执行此操作。您不能将所有内容都列入黑名单,但可以确保墙外有护城河。
    【解决方案3】:

    'HANGUL FILLER' (U+3164)

    自 1993 年的 Unicode 1.1 以来,有一个空的宽零空格字符。

    我们看不到它,也不能单独复制/粘贴它,因为我们无法选择它!

    需要通过unix键盘快捷键生成:CTRL + SHIFT + u + 3164

    几乎可以 ? 任何东西:变量、函数名、url、文件名、模仿 DNS、使哈希字符串无效、数据库条目、博客文章、登录、允许伪造相同的帐户等.


    演示 1:更改变量

    变量hijacked包含一个Hangul Filler char,控制台日志调用不带char的变量:

    const normal = "Hello w488ld"
    const hijaㅤcked = "Hello w488ld"
    console.log(normal)
    console.log(hijacked)

    DEMO 2:劫持网址

    这 3 个 url 将指向xn--stackoverflow-fr16ea.com:

    https://stackㅤㅤoverflow.com

    https://stackㅤㅤoverflow.com
    

    https://stackㅤㅤoverflow.com

    【讨论】:

      【解决方案4】:

      Unicode Security Considerations Report

      它涵盖了各个方面,从渲染字符串的欺骗到以不安全语言处理 UTF 编码的危险。

      【讨论】:

        【解决方案5】:

        U+2800 BRAILLE PATTERN BLANK - 没有任何“点”的盲文字符。它看起来像一个普通的“空间”,但没有被归类为一个。

        【讨论】:

          猜你喜欢
          • 2011-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          • 2011-07-23
          • 2014-07-30
          • 2018-09-04
          相关资源
          最近更新 更多