代码之家  ›  专栏  ›  技术社区  ›  Matthew Rapati

我应该禁止哪些用户名?[关闭]

  •  14
  • Matthew Rapati  · 技术社区  · 16 年前

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

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

    这有关系吗?

    提前感谢您的回复!

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

    9 回复  |  直到 16 年前
        1
  •  33
  •   Elijah    14 年前

    可接受的用户名

    作为一般策略,我在我设计的系统上限制用户名的方式如下:

    • 用户名必须低于ASCII -这不包括可以用来欺骗用户的Unicode用户名。例如,在用户名中包含Unicode时,名称“admin”和“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin”、“admin
    • 用户名必须唯一 -不建议将用户名用作唯一标识符,但如果用于电子邮件或登录,将其作为唯一值仍然是有意义的。
    • 用户名与保留关键字不冲突 -不允许用户名成为公用系统用户名 有用,因为它是社会工程的一个途径,可以被黑帽用来欺骗你系统上的用户。这意味着,admin、webadmin、postmaster、root、administration、sysadmin等应该被阻止。此外,如果要使用REST样式的URL系统,请确保用户名不会与将来可能包含的任何潜在路径冲突。
    • 用户名是 清洁 -从输入的用户名中删除任何HTML或CSS标记,以防止XSS攻击或可能的用户模拟尝试,这一点很重要。另外,不要忘记从用户名中删除前导和尾随空格字符。

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

    有趣的是,在发布这个答案之后,我检查了堆栈溢出的用户名验证,它不允许使用我建议的Unicode字符。但是,它确实会给出一个神秘的错误,即用户名是“保留的”。

        2
  •  15
  •   Community CDub    8 年前

    http://xkcd.com/327/

    不过,认真地说,过滤掉包含潜在恶意代码的名称是一个好主意。除此之外,任何反仇恨/troll/spam/*审查都取决于你和/或你的社区。

        3
  •  13
  •   Will Hartung    16 年前

    防止人们被“作者的名字”所“欺骗”的最好方法就是用其他方式来区分“权威”(例如,你在文章中有一种特殊的文本颜色,你有一个特殊的图标或化身等)。

        4
  •  6
  •   John Topley    16 年前

    如果您的用户名构成了URL的一部分,则可能需要禁用以下部分或全部内容:

    • 应用程序编程接口
    • 贝塔
    • 博客
    • 演示
    • 论坛
    • 论坛
    • 苹果手机
    • 可移动的
    • 保护
    • 视觉神经网络
    • 网络日志
    • 欢迎
    • 万维网
        5
  •  5
  •   Jim OHalloran    16 年前

    说真的,在进入数据库之前,您需要确保所有用户生成的数据(不仅仅是用户名)都被正确地转义。这将确保您的用户不能进行SQL注入攻击(例如,由EvanMeagher链接的BobbyTables卡通)。如果您的用户想使用“robert”);drop table等用户名登录,那么,酷让他们登录。只需确保它不会损害您的数据库。

    同样,如果在站点的任何位置显示用户名,请确保正确编码HTML特殊字符,以防止它们将<script>标记和javascript插入到输出中(XSS漏洞)。例如,用户名为“<script>alert('hi');</script>”的用户不应看到警报框。

    如果没有任何理由不允许像SQL注入或XSS攻击这样的用户名,只要您绝对确保该用户不会因为拥有一个用户名而对系统造成损害。

    如果您提供任何与用户名相关的电子邮件服务(例如,Webmail服务),您将希望确保用户不能使用 RFC 2142 reserved email addresses (或者你在发射前把它们全部注册。

    最后,还有一个非技术原因。如果该用户的用户名出现在网站上的任何位置,则可能需要禁止使用“admin”、“administrator”、“root”、“sysadmin”、“webmaster”、“ordinator”等用户名,因为这些用户名可能意味着对另一个用户拥有网站的某种所有权或控制权。您可能只希望网站所有者能够暗示他们拥有该网站。并非所有情况下都需要这样做。

        6
  •  5
  •   Scott Whitlock    16 年前

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

        7
  •  4
  •   Pavels    16 年前

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

    如果用户使用了他的电子邮件密码,那么您就可以自由访问他的电子邮件:)但说真的,保存纯文本密码不是个好主意。

        8
  •  2
  •   Blair Conrad    16 年前

    根据你对名字的处理方式,这不重要。您肯定不应该将它们注入到SQL语句中,因此数据库关键字的危害应该最小化。我的方法是几乎允许任何东西,但不信任任何输入的东西——在SQL语句中使用参数和/或清理数据,如果要将其包括在HTML中。

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

        9
  •  2
  •   Kibbee    16 年前

    我不得不说,你应该允许任何东西,如果你不想让某个人拥有像admin这样的用户,你应该首先创建这个用户,供你自己使用。正如其他人所说,如果您对应用程序进行了正确的编程,那么使用数据库关键字之类的东西就不会有任何问题。如果您没有正确编程,(编写容易受到SQL注入影响的代码)没有什么可以阻止真正有创造力的人绕过黑名单。

    推荐文章