Ema*_*sev 22 authentication standards special-characters
许多基于Web的用户身份验证系统不允许包含字母,数字和下划线以外的字符的用户名.
可能有技术原因吗?
Nic*_*ole 16
精心设计的系统不一定需要防止用户名中的任何特殊字符.
也就是说,传统上已经接受了下划线的原因,下划线通常被视为"单词"字符,以及字母和数字.它通常是给予这种区别的唯一其他角色.在正则表达式中也是如此,即使在大多数操作系统的基础级别也是如此(在单词中键入下划线并双击字母.选择将延伸到下划线.现在尝试使用短划线,它很可能会不.)
Rik*_*kki 14
是的:避免不得不逃避特殊字符.懒惰的程序员只会将用户输入的内容直接删除到某处的代码中,这就是导致注入攻击的原因.
即使它没有被恶意使用,允许用户键入会在其他地方发生冲突的字符也可能比必要的更麻烦.例如,如果您决定为每个用户创建一个文件系统目录,以存储其上载,则用户名必须符合该操作系统上的目录命名规则(例如\/:*?"<>|,Windows上的否).
一旦你避免了像目录命名之类的冲突,并且被剥离"';%并//避免注入攻击,你已经删除了大多数标点符号,并且"为什么有人甚至需要用户名中的标点符号"?
编写一个快速正则表达式来验证用户名[a-zA-Z0-9_]并使用它来完成它要容易得多,而不是弄清楚所有可能不会发生冲突的标点符号,或者以某种方式将它们映射到其他字符.
然后,就像计算中的许多事情一样,只要有足够的人开始只有用户名的字母,数字和下划线,并且人们开始为该规范创建用户名,它就成了事实上的标准并且自我延续!
未指定时我使用:
^\w(?:\w*(?:[.-]\w+)?)*(?<=^.{4,32})$
Run Code Online (Sandbox Code Playgroud)
这需要长度为4,最多32个字符.它必须以单词字符开头,并且可以具有非连续的点和短划线.我使用它的唯一原因是因为它足够严格,可以与几乎任何东西集成:)
有效期:
test.tost
无效:
test..tost
当它干扰人们在用户名中使用他们的母语的能力时,我不喜欢可读性论点。
我建议您尝试使用包含http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories或http://msdn.microsoft.com/en-us/library/20bw873z 的字符类。 aspx#SupportedNamedBlocks。我没试过这个,但是
[\p{L}\p{N}\p{M}]
Run Code Online (Sandbox Code Playgroud)
可能值得一试。
| 归档时间: |
|
| 查看次数: |
39005 次 |
| 最近记录: |