如何清理用于 URL 的用户名
什么是一个好的正则表达式来过滤用户名? [A-Za-z0-9 ]
这样可以吗,还是说太死板了?还有其他需要注意的地方吗?(比如去掉空格?)
3 个回答
1
你在自己答案下的评论才是真正的问题所在。把用户名用base64或者其他方式编码在传输过程中其实很简单,但如果你允许用户选择任意的Unicode用户名,他们就很容易模仿其他人。
基本的想法是,Unicode有很多看起来一模一样但编码方式不同的字符。想了解更多,可以看看关于同形攻击的详细描述。我不知道有没有什么库可以合理处理这个问题,但如果你想要一个简单的正则表达式解决方案,最好还是限制一下可用字符的范围。
3
在你把用户名放到网址里时,只需要对它进行一下“编码”处理。
3
对于用户名来说,这样设置是可以的,但你可能想让他们使用一些符号,比如 -
、_
、%
、@
和 .
。简单来说,就是允许使用字母、数字和这些符号(也就是 [a-zA-Z0-9._%+-]
)。很多人喜欢用他们的邮箱作为用户名,这样的设置可以满足超过99%的人。在安全要求不高的情况下,我觉得可以放宽一些限制。