应该允许在用户名中使用Unicode吗?

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

同态恐怖袭击 用户'猫'和'сat'是不同的Unicodestring,虽然他们看起来是一样的。 第二个字母“сat”中的第一个字母是俄文“с” – “小圆圈小字母ES”。 系统不能轻易说出你在欺骗另一个用户的名字 – 对电脑来说刻痕是不一样的。

编辑:防止混合脚本不能解决问题。 例如'сосо'是纯粹的Cyryllic,可以用来欺骗ascii'coco'。

此外,从左到右覆盖(和朋友)。让他们unsanitized,他们会搞砸你的整个页面。

HTTPauthentication? 通过现有协议发送unicode用户名(和/或密码)可能会有一些问题。 我之前遇到的一种情况是使用基本身份validation。 没有明确的方式来处理在基本的身份validation头中发送这些unicode用户名/密码。

尽pipe为什么应该有用户名,而不仅仅是一个“密码”来标识用户,我认为没有理由不允许unicode用户名。

更重要的是,该密码被validation为与语言无关:无论用户的键盘设置如何,它都应该处理关键帧。 这意味着,“שלום”和“akuo”将是相同的密码。 这很重要,因为用户通常不会看到他正在input的密码字符,而且如果CAPSLOCK打开,他们会变得非常生气。

虽然你可以继续并允许unicode,但是要明白一些用户名不会如预期的那样工作,这要归功于不同的文化对同一个字符应用不同的规则。

考虑打破案件敏感性的基本情况:在土耳其语中,用户名“Id1”和“id1” 是不同的 (在土耳其语中有两个不同的是,一个是一个点,一个没有,导致2个资本和2个小字母不符合与英语相同的资本化规则)。 所以,当任何一个土耳其人用自己的语言input他们的名字时,程序就不会像他们期望的那样对待他们的名字 – 相反,它会经历一个奇怪的转变成突变的英语。

欧洲语言中特殊的拉丁文字符具有相似的重叠,使得它看起来是随机的,他们正在进入哪一种语言。世界其他地区有相似的共用字符,使用规则不同 – 在某些情况下,可能导致民族和文化仇恨一些非常愤怒的人,当用户名的字符被看作是用他们仇恨的语言(因为这些外来字符是操作系统默认设置)写的。

你的观察并不总是如此。 而且,ASCII的select主要是人为因素,而不是技术或安全问题。

对于大多数情况,这只是为了方便编程。 程序员从来不知道网站上的所有软件,图书馆,公用事业都会打破或者不打印某些字符。 为什么ASCII码运作良好,为什么网站开发有风险 此外,一些打包的networking软件将阻止用户名中使用Unicode。 这造成了许多网站仅以ASCII码支持用户名的问题。

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

Unicode有一些问题。 它更多的是在数据处理方面。 它可能是显示,字体,软件和非BMP字符的软件库的准备,校对,比较,input方法,书写方向。 pipe理员可能没有足够的知识来处理它们。 根据网站的性质,这可能是一个问题,但大多不是。

出于pipe理的目的,input一些奇特的字符并不容易。 这使得pipe理员很难search用户。 pipe理员也难以在网站上保留外语的攻击性用户名。

然而,中文用户名被中文网站使用并不罕见。 它可能不总是在ASCII。 其他文化和语言也是如此。 一些全球性的项目几乎可以接受各种Unicode字符。 维基百科是一个例子。

简单的ASCII是罕见的,我会说。 通常情况下,没有人会想到,因为在西欧,拉丁美洲就足够了,美国也是如此。 一些数据库可以区分旧版字符集中的文本和Unicode( varcharnvarchar ),或者为其他数据库设置特殊字符集。

特别是在美国,很多人甚至从来没有注意到ASCII是不够的。 有些人试图find借口»用户必须input«或类似的大多是假的,虽然。

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

我会说一个很大的原因是在大多数PHP安装中缺less对unicode的支持。 这是不容易的,所以为什么在ASCII的可能性足以覆盖你的整个用户群的时候允许呢?

或者,我们可以停止提供一个关于用户名是什么样子的废话,以及我们是否可以发音/记住它。 这应该是用户的关注。 如果没有人记得你,那是你的损失。 而且,至于名称欺骗,无论如何这几乎是不可避免的。 然而,你很less听说过用户名欺骗。

想象一个论坛,想象一个人的post和你所看到的一样。 你遇到麻烦,说你没有做,发布一个链接到你的历史,看到这个职位是不存在的。 点击ACTUALLY发布的那个人的个人资料,bam,你有他的个人资料。 他现在是禁不住的

拥有相同的名称并不意味着您拥有相同的用户数据。 任何不便于区分两个类似用户的应用程序无论如何都是可怜的,需要重新编写。