如何清理用于 URL 的用户名

1 投票
3 回答
854 浏览
提问于 2025-04-16 23:25

什么是一个好的正则表达式来过滤用户名? [A-Za-z0-9 ] 这样可以吗,还是说太死板了?还有其他需要注意的地方吗?(比如去掉空格?)

3 个回答

1

你在自己答案下的评论才是真正的问题所在。把用户名用base64或者其他方式编码在传输过程中其实很简单,但如果你允许用户选择任意的Unicode用户名,他们就很容易模仿其他人。

基本的想法是,Unicode有很多看起来一模一样但编码方式不同的字符。想了解更多,可以看看关于同形攻击的详细描述。我不知道有没有什么库可以合理处理这个问题,但如果你想要一个简单的正则表达式解决方案,最好还是限制一下可用字符的范围。

3

在你把用户名放到网址里时,只需要对它进行一下“编码”处理。

3

对于用户名来说,这样设置是可以的,但你可能想让他们使用一些符号,比如 -_%@.。简单来说,就是允许使用字母、数字和这些符号(也就是 [a-zA-Z0-9._%+-])。很多人喜欢用他们的邮箱作为用户名,这样的设置可以满足超过99%的人。在安全要求不高的情况下,我觉得可以放宽一些限制。

撰写回答