用户名(和密码)中的Unicode?

Zyd*_*eco 7 php mysql security unicode username

在审查了这个之后,我意识到我仍然有一些关于这个主题的问题.

出于合法的安全目的,是否应该"遗漏"任何字符?这包括所有字符,例如括号,逗号,撇号和括号.

在这个主题上,我承认不明白为什么管理员似乎喜欢强制执行"你只能使用字母,数字和空格"规则.还有什么可能成为安全漏洞或破坏我不知道的东西(即使是ASCII)?据我在编码期间看到的情况,绝对没有理由禁止任何角色使用用户名.

dec*_*eze 5

不使用某些字符没有安全理由。如果您正确处理了所有输入,那么无论您是只处理字母数字字符还是中文,都没有任何区别。

比较容易处理只alphnum用户名。您无需考虑数据库中排序规则的歧义、URL 中的用户名编码等问题。但同样,如果你正确地处理它,就没有技术上的理由反对它。

出于实际原因,密码通常只有字母数字。例如,大多数密码输入不接受 IME 输入,因此几乎不可能有日语密码。虽然没有禁止非字母字符的安全理由。相反,可用的字母表越大越好。

  • @Zydeco 也许只是显示一条警告,如 *“您可能无法在另一台机器上再次输入此密码,请确保您知道自己在做什么”* 如果用户输入了任何非 anum 字符?我希望大多数*可以*输入非alnum密码的人都知道其中的含义,所以我不会太担心。最坏的情况是,用户可以简单地重置她的密码。 (2认同)

Bal*_*usC 3

通常正是那些可用于在程序中注入恶意代码的字符。例如SQL 注入(引号、破折号等)、XSS/CSRF(引号、鱼大括号等),甚至eval()在代码中其他地方使用时的编程语言注入。

当您作为开发人员正确清理用户控制的输入/输出(即随 HTTP 请求传入的所有内容)时,这些字符通常不会造成损害;标头、参数和正文。例如,参数化查询或mysql_real_escape_string()在 SQL 查询中内联它们时使用,以防止 SQL 注入和htmlspecialchars()在 HTML 中内联它们以防止 XSS 时使用。但我可以想象管理员不信任所有开发人员,因此他们添加了这些限制。

也可以看看: