我应该禁用哪些用户名?

时间:2009-05-28 00:37:09

标签: username

我正在为一个网络应用程序进行用户注册,并且刚开始认为我不想让一些聪明/邪恶的人出现并注册一个像'admin'这样的用户名。

我应该禁用哪些其他用户名?数据库关键字?

重要吗?

提前感谢您的回复!

编辑:我有安全保障。我更感兴趣的是,人们常常禁止某些名字阻止人们伪造权威,甚至某些垃圾邮件喜欢注册的词语。

9 个答案:

答案 0 :(得分:33)

可接受的用户名

作为一般政策,我通过以下方式限制我设计的系统上的用户名:

  • 用户名必须低于ascii - 这会排除可用于欺骗用户的unicode用户名。例如,当您将unicode包含在用户名中时,名称“admin”和“admin”是单独的用户名,但可能看起来与不知情的用户相同。
  • 用户名必须是唯一的 - 建议不要使用用户名作为唯一标识符,但如果将其用作电子邮件或登录,则将其作为唯一值仍然有意义。
  • 用户名与保留关键字不冲突 - 禁止用户名成为常见系统用户名 非常有用,因为它是黑帽子可以使用的社交工程的一种途径欺骗系统上的用户。这意味着,应该阻止admin,webadmin,postmaster,root,administration,sysadmin等。更重要的是,如果您将使用REST样式的URL系统,请确保用户名不会与您将来可能包含的任何潜在路径冲突。
  • 用户名已清除 - 为了防止XSS攻击或可能的用户冒充尝试,必须从输入的用户名中删除任何html或css标记。另外,不要忘记从用户名中修剪前导和尾随空白字符。

问题实际上取决于您的使用。如果您的用户名只是与网络论坛上的用户相关联的名称,那么这并不重要。但是,如果用户名是具有安全性问题的大型系统的一部分,则应该有一个策略。用户名不正确的主要危险是黑帽子可以利用它们作为社会工程无辜用户泄露敏感信息的一种方法。

有趣的是,在发布这个答案之后,我检查了Stack Overflow的用户名验证,它确实禁止像我建议的unicode字符。但是,它确实给出了一个含糊的错误,说用户名是“保留的”。

答案 1 :(得分:15)

http://xkcd.com/327/

但是,严肃地说,过滤掉包含潜在恶意代码的名称是一个好主意。除此之外,任何反仇恨/巨魔/垃圾邮件/ *审查都取决于您和/或您的社区。

答案 2 :(得分:13)

让人们不被“授权的名字”欺骗“的最好方法就是以某种其他方式区分”权威“(即你在帖子中有特殊的文字颜色,你有一个特殊的图标或头像等。)。

答案 3 :(得分:6)

如果您的用户名构成了网址的一部分,您可能希望禁止以下部分或全部内容:

  • API
  • 测试
  • 博客
  • 演示
  • 论坛
  • 论坛
  • iphone
  • 移动
  • 安全
  • SVN
  • 欢迎
  • WWW

答案 4 :(得分:5)

说真的,您需要确保在进入数据库之前正确转义任何用户生成的数据(不仅仅是用户名)。这将确保您的用户无法进行SQL注入攻击(例如由Evan Meagher链接的Bobby Tables卡通)。如果您的用户想要使用“Robert'); DROP TABLE”这样的用户名登录,那么,请让他们冷静下来。只要确保它不会损害您的数据库。

同样,如果您在网站上的任何位置显示用户名,请确保您的html特殊字符已正确编码,以防止它们注入< script>标签和javascript到您的输出(XSS漏洞)。例如用户名为“< script> alert('Hi');< / script>”的用户永远不要看警报框。

如果您没有理由不禁止看起来像SQL注入或XSS攻击的用户名,只要您确保用户不会对系统造成任何伤害。

如果您提供与用户名相关的任何电子邮件服务(例如网络邮件服务),您需要确保用户无法使用RFC 2142 reserved email addresses之一进行注册(或者您自己注册所有这些服务)在发布之前。

最后,有一个非技术原因。如果该人的用户名出现在网站的任何地方,则可能需要禁止用户名,如“admin”,“administrator”,“root”,“sysadmin”,“webmaster”,“版主”,因为这些用户名可能意味着某种形式拥有或控制该网站给另一个用户。您可能只希望网站所有者能够暗示他们拥有该网站。在所有情况下都可能不需要这样做。

答案 5 :(得分:5)

禁止公司商标的任何组合可能是值得的。从法律角度来看,它不仅有意义,而且还可以防止恶意访问者像组织成员那样出现。

答案 6 :(得分:4)

考虑用电子邮件替换用户名,因为现在用户往往会忘记他们的用户名。

如果用户使用他的电子邮件密码,那么您可以免费访问他的电子邮件:)但严重的是,保存明文密码并不是一个好主意。

答案 7 :(得分:2)

根据您对名称的处理方式,它无关紧要。您绝对不应该将它们注入SQL语句中,因此应尽量减少数据库关键字的危害。我的方法是允许几乎任何东西,但不信任输入的任何内容 - 在SQL语句中使用参数和/或清理数据(如果要将其包含在HTML中)。

考虑阅读此问题以获取有关SQL注入攻击的更多信息: What is the best way to avoid SQL injection attacks?

答案 8 :(得分:2)

我不得不说你应该允许任何东西,如果你不想让某人拥有像管理员这样的用户,你应该最初创建该用户供你自己使用。像其他人所说的那样,如果你正确编写应用程序,那么使用数据库关键字这样的东西应该没有任何问题。如果你没有正确编程,(编写容易受到sql注入的代码),没有任何东西可以阻止一个真正有创造力的人绕过你的黑名单。