用户名中是否应允许Unicode?

ban*_*anx 49 security unicode web-services username

为什么大多数(所有?)网站仅支持ASCII用户名?如果管理员决定开始接受Unicode用户名,是否有任何安全注意事项?

Raf*_*ird 58

同性恋攻击.用户'cat'和'сat'是不同的unicode字符串,尽管它们看起来相同.第二个'сat'中的第一个字母是俄语'с' - "CYRI​​LLIC SMALL LETTER ES".系统不能轻易地告诉你是否欺骗了另一个用户的名字 - 对于计算机而言,缺口是不同的.

编辑:防止混合脚本无法解决问题.例如'сосо'是纯Cyryllic,可以用来欺骗ascii'coco'.

此外,从左到右覆盖(和朋友.)让他们不加素,他们会弄乱整个页面.

  • ASCII也可以进行同形攻击; "0"和"O"在许多字体中都是难以区分的,"|","I","l"和"1"也是如此.".com",".玉"等. (19认同)
  • 如何允许单脚本名称,但在每个用户名旁边添加一个小标识来标识脚本?这样拉丁语"可可"和西里尔语"可可"是可区分的. (7认同)
  • 不是OpenID(在SO上使用)使得欺骗另一个用户的名字非常容易吗?我的印象是,如果我愿意,我可以将我的名字显示为"Jon Skeet".然而,我没有看到那种事情在SO上存在问题. (4认同)
  • 您并不总是需要*混合*脚本.一些所有ascii单词可以使用仅限西里尔语重新创建,例如'coco'.所以你也需要处理它. (2认同)
  • @PaulJohnson,许多系统只是单通道的。例如,如果我告诉您 coco 的个人资料位于 stackoverflow.com/users/coco ,那么单击该链接很可能会将您带到一个欺骗用户。 (2认同)

小智 6

HTTP身份验证?通过现有协议发送unicode用户名(和/或密码)可能会出现一些问题.我之前遇到的一个案例是基本身份验证.没有明确定义的方法来处理在基本auth头中发送这些unicode用户名/密码.


Pav*_*sky 6

尽管为什么应该有用户名而不仅仅是用于识别用户的"密码",但我认为没有理由不允许使用unicode用户名.

更重要的是,密码要验证为与语言无关:它应该处理密钥,而不管用户的键盘设置如何.这意味着,"שלום"和"akuo"将是相同的密码.这很重要,因为用户经常看不到他正在键入的密码字符,如果CAPSLOCK打开,他们会非常生气.


Sco*_* M. -2

我想说一个重要原因是大多数 PHP 安装缺乏对 unicode 的支持。它并不容易使用,所以当 ASCII 的可能性足以覆盖您的整个用户群时为什么要允许它呢?

  • 问题与 PHP 无关,因此该语言的弱点不应该成为争论的焦点。 (7认同)