Authentication 用户名中是否应允许使用Unicode?

Authentication 用户名中是否应允许使用Unicode?,authentication,unicode,Authentication,Unicode,为什么大多数(所有?)网站只支持ASCII格式的用户名?如果管理员决定开始接受Unicode用户名,有什么安全考虑吗?我想说的一个重要原因是大多数PHP安装中都不支持Unicode。使用它并不容易,所以当ASCII格式的可能性足以覆盖整个用户群时,为什么要允许使用它呢?我认为普通ASCII格式很少见。通常只是没人想到它,因为在西欧,拉丁语1就足够了,对美国也是如此。一些数据库区分传统字符集中的文本和Unicode(varchar与nvarchar)或其他数据库必须设置特殊字符集 特别是在美国,许

为什么大多数(所有?)网站只支持ASCII格式的用户名?如果管理员决定开始接受Unicode用户名,有什么安全考虑吗?

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

我认为普通ASCII格式很少见。通常只是没人想到它,因为在西欧,拉丁语1就足够了,对美国也是如此。一些数据库区分传统字符集中的文本和Unicode(
varchar
nvarchar
)或其他数据库必须设置特殊字符集

特别是在美国,许多人甚至从未注意到ASCII码是不够的。有些人试图用“用户必须输入”或类似的借口寻找借口,但这些借口大多是假的


为了回答你的问题,我怀疑是否有安全考虑,除了可能使用不同的脚本(a和а看起来相同,但一个是拉丁语,一个是西里尔语——这以前在URL中就已经做过了)欺骗其他人的名字之外。一般来说,我认为这是开发人员的疏忽,他们可能应该更清楚。

同形文字攻击。用户“cat”和“Сat”是不同的unicode字符串,尽管它们看起来相同。第二个字母“c at”中的第一个字母是俄语“c”-确切地说是“西里尔文小写字母ES”。系统无法轻易判断你在欺骗另一个用户的名字——对计算机来说,漏洞是不同的

编辑:防止混合脚本并不能解决问题。例如,“СöСö”是纯西里尔字母,可用于伪造ascii“coco”

另外,从左到右覆盖(和朋友)。如果不初始化它们,它们会弄乱整个页面。

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

虽然您可以继续并允许使用unicode,但要了解,由于不同的区域性对相同的字符应用不同的规则,一些用户名将无法按预期工作

考虑打破区分大小写原则的基本情况:在土耳其语中,用户名“Id1”和“Id1”是不同的(在土耳其语中有两个不同的Is,一个带点,一个不带点,导致两个大写字母和两个小写字母与英语的大写规则不匹配)。因此,尽管任何土耳其人都可以用自己的语言输入自己的名字,但该程序不会像他们期望的那样对待他们的名字——相反,它将经历一个奇怪的转变,变成变异英语


欧洲语言中的特殊拉丁字符也有类似的重叠,这使得它们输入的语言似乎是随机的。世界上其他地区也有类似的共享字符,但使用规则有所不同——在某些情况下,当组成用户名的字符被视为是用他们憎恨的敌人的语言书写时,民族和文化仇恨可能会导致一些非常愤怒的人(由于这是操作系统对这些外来字符的默认设置)。

您的观察并不总是正确的。而且,选择ASCII主要是人为因素,而不是技术或安全问题

在大多数情况下,这只是为了便于编程。程序员永远不知道网站中的所有软件、库、实用程序是否会因某些字符而中断。为什么在ASCII工作正常的情况下,网站开发会面临风险?此外,一些打包的web软件会阻碍用户名中使用Unicode。这导致了以下问题:许多网站只支持ASCII格式的用户名

理论上,目前所有的软件都能很好地处理8位数据。现在在存储和传输方面没有问题。即使某些协议没有问题,它们也可以用UTF-7或其他转换方案进行转换

Unicode存在一些问题。它更多的是在数据处理方面。可能是显示、字体、软件和非BMP字符的软件库的准备情况、排序、比较、输入方法、书写说明。管理员可能没有足够的知识来处理这些问题。根据网站的性质,它可能会e是个问题,但大多数情况下不是

出于管理目的,输入一些外来字符并不容易。这使得管理员很难搜索用户。管理员也很难在网站上保留外文的攻击性用户名


然而,中文网站使用中文用户名并不罕见。它可能并不总是ASCII格式。其他文化和语言也不例外。一些全球项目几乎接受所有类型的Unicode字符。维基百科就是一个例子。

或者,我们可以停止对用户名的外观以及我们是否能发音大惊小怪/记住这一点。这应该是用户关心的问题。如果没有人记得你,那就是你的损失。至于姓名欺骗,这在任何情况下都几乎是不可避免的。然而,你很少听说过用户名欺骗

想象一个论坛,想象有人发布了一个与你的帐户相同的帐户。你遇到麻烦,说你没有这样做,发布一个链接到你的历史记录,看到帖子不在那里。单击实际发布它的人的个人资料,砰,你有他的个人资料。他现在可以被禁止了


同名并不意味着你拥有相同的用户数据。任何不能让你轻松区分两个相似用户的应用程序都很糟糕,需要重新编写。

尽管为什么要有用户名而不仅仅是“密码”来识别用户,这一点值得怀疑,但我认为没有理由否认允许使用unicode用户名

更重要的是,密码必须有效