不使用某些字符没有安全理由。如果您正确处理了所有输入,那么无论您是只处理字母数字字符还是中文,都没有任何区别。
这是比较容易处理只alphnum用户名。您无需考虑数据库中排序规则的歧义、URL 中的用户名编码等问题。但同样,如果你正确地处理它,就没有技术上的理由反对它。
出于实际原因,密码通常只有字母数字。例如,大多数密码输入不接受 IME 输入,因此几乎不可能有日语密码。虽然没有禁止非字母字符的安全理由。相反,可用的字母表越大越好。
通常正是那些可用于在程序中注入恶意代码的字符。例如SQL 注入(引号、破折号等)、XSS/CSRF(引号、鱼大括号等),甚至eval()
在代码中其他地方使用时的编程语言注入。
当您作为开发人员正确清理用户控制的输入/输出(即随 HTTP 请求传入的所有内容)时,这些字符通常不会造成损害;标头、参数和正文。例如,参数化查询或mysql_real_escape_string()
在 SQL 查询中内联它们时使用,以防止 SQL 注入和htmlspecialchars()
在 HTML 中内联它们以防止 XSS 时使用。但我可以想象管理员不信任所有开发人员,因此他们添加了这些限制。