哪些Unicode字符有危险?

时间:2011-11-04 01:19:11

标签: unicode character sanitization blacklist

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

由于

5 个答案:

答案 0 :(得分:6)

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

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

无法猜出你的意思是危险的。

答案 1 :(得分:2)

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

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

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

Tutorial on whitelisting international characters in .NET

Unicode Regex: Categories

答案 2 :(得分:0)

'HANGUL FILLER'(U + 3164)

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

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

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

几乎可以提供所有功能:变量,函数名称,URL,文件名,模拟DNS,使哈希字符串无效,数据库条目,博客帖子,登录名,允许伪造相同帐户等


演示1:更改变量

变量 hijacked 包含韩文填充字符,控制台日志调用不带字符的变量:

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


演示2:劫持URL

这3个网址将指向xn--stackoverflow-fr16ea.com

https://stackㅤㅤoverflow.com

https://stackㅤㅤoverflow.com
  

https://stackㅤㅤoverflow.com

答案 3 :(得分:0)

Unicode Security Considerations Report

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

答案 4 :(得分:0)

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