用户名中是否应允许Unicode?

时间:2010-08-12 18:10:07

标签: web-services security unicode username

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

8 个答案:

答案 0 :(得分:58)

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

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

此外,从左到右覆盖(以及朋友。)让他们不加区分,他们会弄乱整个页面。

答案 1 :(得分:6)

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

答案 2 :(得分:6)

虽然为什么应该有用户名而不仅仅是用来识别用户的“密码”,这是值得怀疑的,但我认为没有理由不允许使用unicode用户名。

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

答案 3 :(得分:4)

虽然您可以继续并允许unicode,但要了解一些用户名将无法按预期工作,这要归功于不同的文化对相同的字符应用不同的规则。

考虑打破案例敏感性的基本情况:在土耳其语中,用户名“Id1”和“id1”是不同的(土耳其语中有两个不同的Is,一个带点,一个没有,导致2个captial和2个小写字母与英语相同的captialization规则不匹配。因此,虽然任何土耳其人都可以用他们自己的语言输入他们的名字,但该程序不会像他们期望的那样对待他们的名字 - 相反,它会经历一个奇怪的转变为突变英语。

欧洲语言中的特殊拉丁字符具有类似的重叠,使得它们输入的语言似乎是随机的。世界上其他地区具有相似的共享字符,其中使用规则不同 - 在某些情况下,国家和文化仇恨当构成用户名的角色被视为用他们讨厌的敌人的语言编写时(因为这是那些外国角色的操作系统默认设置),可能会导致一些非常愤怒的人

答案 4 :(得分:3)

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

对于大多数情况,这只是为了方便编程。程序员永远不会知道网站中的所有软件,库,实用程序都会破坏某些字符。为什么在ASCII运行良好时会冒网站开发的风险?此外,一些打包的Web软件会阻碍在用户名中使用Unicode。这导致了许多网站仅支持ASCII用户名的问题。

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

Unicode存在一些问题。它更侧重于数据处理。它可能是非BMP字符的显示,字体,软件和软件库的准备情况,整理,比较,输入方法,书写方向。管理员可能没有足够的知识来处理它们。根据网站的性质,这可能是一个问题,但大部分都不是。

出于管理目的,输入一些异国情调的角色并不容易。它使管理员难以搜索用户。管理员也很难在网站上保留外语的令人反感的用户名。

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

答案 5 :(得分:2)

普通的ASCII很少见,我会说。通常情况下,没有人会想到它,因为在西欧,拉丁语1就足够了,对美国也是如此。一些数据库区分旧版字符集中的文本和Unicode(varcharnvarchar)或其他数据库必须设置特殊字符集。

特别是在美国,很多人甚至都没有注意到ASCII是不够的。有些人试图寻找借口»用户必须输入«或类似的,但主要是虚假的。

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

答案 6 :(得分:-2)

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

答案 7 :(得分:-2)

或者,我们可以停止给出一个关于用户名是什么样的废话,以及我们是否可以发音/记住它。这应该是USERS关注的问题。如果没有人记得你,那就是你的损失。而且,至于名字欺骗,这在任何情况下几乎都是不可避免的。然而,你很少听说过用户名恶搞。

想象一个论坛,想象某人发布的帐户与您的帐户相同。你有麻烦,说你没有这样做,发布你的历史链接,看到帖子不存在。点击实际发布它的人的个人资料,然后bam,你有他的个人资料。他现在已被禁止了。

具有相同的名称并不意味着您拥有相同的用户数据。任何不易让你区分两个类似用户的应用程序都是穷人无论如何都需要重写。