哪些Unicode字符(更准确地说是代码点)是危险的,应该列入黑名单并禁止用户使用? 我知道BIDI会覆盖字符而“零宽度空间”很容易出问题,但其他人在哪里呢?
由于
答案 0 :(得分:6)
字符并不危险:只有不恰当的用途才是。
您可以考虑阅读以下内容:
无法猜出你的意思是危险的。
答案 1 :(得分:2)
安全性中的黄金法则是whitelist
而不是黑名单,而不是试图涵盖所有不良字符,基于确保用户仅使用已知的好字符进行验证是一个更好的主意。
有一些解决方案可以帮助您构建国际白名单所需的大白名单。例如,在.NET中有UnicodeCategory
。
这个想法是,图书馆不是将数千个单独的字符列入白名单,而是将它们分配到类别,如字母数字字符,标点符号,控制字符等。
答案 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
答案 3 :(得分:0)
见Unicode Security Considerations Report。
它涵盖了各个方面,从欺骗呈现的字符串到以不安全的语言处理 UTF 编码的危险。
答案 4 :(得分:0)
U+2800 BRAILLE PATTERN BLANK - 一个没有任何“点”的盲文字符。它看起来像一个普通的“空间”,但不归类为一个。