![]() |
1
33
可接受的用户名作为一般策略,我在我设计的系统上限制用户名的方式如下:
这个问题真的取决于你的用途。如果您的用户名只是与Web论坛上的用户相关联的名称,那么这并不重要。但是,如果用户名是具有安全问题的大型系统的一部分,那么您应该有一个策略。不正确用户名的主要危险在于,黑帽子可以利用它们作为社会工程的一种方法,让无辜的用户暴露敏感信息。 有趣的是,在发布这个答案之后,我检查了堆栈溢出的用户名验证,它不允许使用我建议的Unicode字符。但是,它确实会给出一个神秘的错误,即用户名是“保留的”。 |
![]() |
2
15
不过,认真地说,过滤掉包含潜在恶意代码的名称是一个好主意。除此之外,任何反仇恨/troll/spam/*审查都取决于你和/或你的社区。 |
![]() |
3
13
防止人们被“作者的名字”所“欺骗”的最好方法就是用其他方式来区分“权威”(例如,你在文章中有一种特殊的文本颜色,你有一个特殊的图标或化身等)。 |
![]() |
4
6
如果您的用户名构成了URL的一部分,则可能需要禁用以下部分或全部内容:
|
![]() |
5
5
说真的,在进入数据库之前,您需要确保所有用户生成的数据(不仅仅是用户名)都被正确地转义。这将确保您的用户不能进行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
不允许公司商标的任何组合可能是值得的。它不仅从法律的角度讲是有意义的,而且还可以防止恶意访问者看起来像您组织的成员。 |
![]() |
7
4
考虑用电子邮件替换用户名,因为现在用户往往会忘记用户名。 如果用户使用了他的电子邮件密码,那么您就可以自由访问他的电子邮件:)但说真的,保存纯文本密码不是个好主意。 |
![]() |
8
2
根据你对名字的处理方式,这不重要。您肯定不应该将它们注入到SQL语句中,因此数据库关键字的危害应该最小化。我的方法是几乎允许任何东西,但不信任任何输入的东西——在SQL语句中使用参数和/或清理数据,如果要将其包括在HTML中。 考虑阅读此问题以获得有关SQL注入攻击的更多信息: What is the best way to avoid SQL injection attacks? |
![]() |
9
2
我不得不说,你应该允许任何东西,如果你不想让某个人拥有像admin这样的用户,你应该首先创建这个用户,供你自己使用。正如其他人所说,如果您对应用程序进行了正确的编程,那么使用数据库关键字之类的东西就不会有任何问题。如果您没有正确编程,(编写容易受到SQL注入影响的代码)没有什么可以阻止真正有创造力的人绕过黑名单。 |