为什么有必要验证用户名?

时间:2011-10-06 03:41:16

标签: forms security validation username

我一直在阅读Michael Hartl撰写的Ruby on Rails 3教程书,他没有在本书的示例应用程序中验证用户名。然而,如此多的网站要求用户只注册字母数字和下划线(甚至不总是允许)。

我在google和stack_overflow上搜索了一段时间,但只发现很多人询问如何以上述方式验证用户名。

哎呀,为什么我们首先需要做呢?

4 个答案:

答案 0 :(得分:1)

我能想到的原因是确保它们对URL友好。任何拥有用户资源且使用URL中的用户名而非ID的网站都需要一个URL安全的用户名。

任何需要用户名但不将其用作资源的网站可能不需要用户名开头(使用电子邮件地址代替登录)。

编辑: 回答您的评论:“空格字符不安全,因为当URL被转录或排版或受到文字处理程序的处理时,重要的空格可能会消失,并且可能会引入无关紧要的空格。”

根据RFC 1738。本文档还描述了其他字符不安全的原因。

答案 1 :(得分:0)

我同意。我认为在大多数情况下只允许空格。我认为主要原因是避免可能会出现安全漏洞的编码/解码问题。但是,所有这些问题都可以而且应该以更好的方式解决。我已经看到了相同的密码,甚至,这更加荒谬(区域不允许特殊字符)。

答案 2 :(得分:0)

如果用户名应该是唯一的,那么如果您有两个名为这些用户的用户呢?

John Doe
John  Doe

如果您将名称直接放入HTML中,它们看起来会完全相同。如果你解决了这个问题,可能还有其他一些事情要做。要求用户名是字母数字(可能还有其他一些字符)可以解决许多这些问题。

答案 3 :(得分:0)

除了声明的其他原因之外,允许任意Unicode字符使一个用户可以使用与拉丁字母非常相似的Unicode字符创建与其他用户名称非常相似的名称,例如

K℮ℎ

KEH

(上面至少在Windows 7上的Chrome中正确呈现)。

另一方面,禁止使用Unicode字符会对非英语访问者产生不必要的偏见,因为非英语访问者可能会在其名称中使用重音符号(例如Jürgen),或者其母语可能使用不基于拉丁字符集的字母表(例如孔夫子)。