2011-10-06 77 views
2

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

我已经在google和stack_overflow上搜索了一段时间,但只发现了大量的人要求如何验证上述方式的用户名。

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

+0

略有不同,但请记住,书中的大多数示例代码都充满了安全漏洞;他们只打算教导如何实现他们演示的功能,而不是打算抛光,完成,生产就绪的组件。 OWASP是一个很好的Web应用程序安全资源。前十名的项目是一个很好的起点https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project – Cheekysoft

回答

1

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

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

编辑: 为了回答您的评论:“空格字符是不安全的,因为显著的空间可能会消失,当URL被转录或排版或遭受的文字处理程序处理,可以引入微不足道的空间”

按照RFC 1738。本文档还介绍了为什么其他字符不安全。

+0

事实上,我听说过关于URLs不应该有空格,但总是不明白为什么(原谅我,如果这一个似乎常识,因为我仍然是一个网络开发新手在这里:o)。此外,还有其他任何安全原因或其他问题? –

+0

我已经编辑了我的答案以回答你的问题。 –

+0

那么如果我不使用URL中的用户名,它将完全正确吗?我的意思是我也使用用户资源,但在URL中使用user_id代替~~ –

0

我同意。我认为在大多数情况下只有空间应该被禁止。我认为主要原因是为了避免编码/解码可能带来安全漏洞的问题。尽管如此,所有这些问题都可以并且应该以更好的方式解决。我已经看到密码相同,甚至更加可笑(Regions不允许特殊字符)。

+0

非常感谢您的回复。恩,那么编码/解码有什么问题呢?以及如何以更好的方式解决这些问题?你能给我一个关于这个的链接吗?另外,为什么空间应该被禁止?由于下面Christian提到的URL问题?难道我们不能解决这个问题 - 就像使用正则表达式或其他东西的子空间一样吗?:) –

0

如果用户名应该是唯一的,如果你有两个用户名?

John Doe 
John Doe 

如果将名称直接放入HTML中,它们看起来完全相同。如果你解决了这个问题,那么Unicode可能还有其他的工作要做。要求用户名是字母数字(也可能是其他字符)解决了许多这些问题。

+0

Thx的答复。那么我没有验证用户名的意义恰恰在于让用户决定他们想要使用的任何名字!当网站告诉我“这个名字已被采纳~~”时,我总是感到头痛。对于那些只想第一次访问帐户的人来看看网站,请尽可能多地使用空间,稍后再更改为您的主要名字!或者甚至你认为你的名字中有很多空格是很酷的~~好吧,一起去吧~~没事吧?我的意思是如果我不在网址中使用用户名,就像上面提到的基督徒一样...... –

0

除了其他陈述的原因,允许任意的Unicode字符使得一个用户可以通过使用与拉丁字母非常相似的Unicode字符来创建与另一个用户的名字非常相似的名称,例如,

K℮ℎ

KEH

(以上正确呈现至少在Chrome在Windows 7)。

另一方面,禁止Unicode字符会对非英语访客造成不必要的偏见,他们可能在其指定名称中包含重音符号(例如Jürgen),或者其母语可能使用不基于拉丁字符的字母(例如孔夫子)。

相关问题