哪些 Unicode 字符(更准确地说是代码点)是危险的,应该被列入黑名单并禁止用户使用?我知道 BIDI 覆盖字符和“零宽度空间”很容易出现问题,但是还有什么其他的呢?
谢谢
哪些 Unicode 字符(更准确地说是代码点)是危险的,应该被列入黑名单并禁止用户使用?我知道 BIDI 覆盖字符和“零宽度空间”很容易出现问题,但是还有什么其他的呢?
谢谢
字符并不危险:只有对它们的不当使用才是危险的。
您可能会考虑阅读以下内容:
不可能猜出您所说的危险是什么意思。
安全方面的黄金法则是whitelist
代替黑名单,而不是试图覆盖所有坏字符,而是在确保用户只使用已知的好字符的基础上进行验证是一个更好的主意。
有一些解决方案可以帮助您构建国际白名单所需的大型白名单。例如,在 .NET 中有UnicodeCategory
.
这个想法是,库不是将数千个单独的字符列入白名单,而是将它们分配到字母数字字符、标点符号、控制字符等类别中。
'韩文填充物' (U+3164)
自 1993 年的 Unicode 1.1 以来,有一个空的宽零空格字符。
我们看不到它,也不能单独复制/粘贴它,因为我们无法选择它!
它需要通过unix键盘快捷键生成:CTRL
++ SHIFT
3164u
它几乎可以处理任何事情:变量、函数名、url、文件名、模仿 DNS、使哈希字符串无效、数据库条目、博客文章、登录名、允许伪造相同的帐户等。
演示 1:更改变量
hijacked变量包含一个 Hangul Filler 字符,控制台日志调用不带字符的变量:
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
请参阅Unicode 安全注意事项报告。
它涵盖了各个方面,从渲染字符串的欺骗到以不安全语言处理 UTF 编码的危险。
U+2800 BRAILLE PATTERN BLANK - 没有任何“点”的盲文字符。它看起来像一个常规的“空间”,但没有被归类为一个。