md!这代码有毒

AlwaysBeta

共 1057字,需浏览 3分钟

 ·

2023-09-13 18:32

你好,我是yes。

刚想周五下午摸个鱼,直接一个钉钉消息打破了我的计划:有个bug。

我说:啥bug?

对方说:刚申请的内部用户的账号登录不上去。

我说:还有这种事,报啥错?

登录的时候报了这个错:

他的密码是这个的:

我瞄了一眼,这明显不含大写啊,你让他密码改成含大写的就行了。

对方有点懵:关键这密码是初始生成的密码啊!他现在登都登不上咋改!管理员重置密码的功能也都没做。

我:???初始密码生成竟然没大写。

我直接一波探索,找到了那块逻辑:

乍一看没啥毛病。。实则毛病挺大:

首先用的是 hutool 的 RandomUtil。

从代码逻辑来看,是想通过  RandomUtil.randomStringUpper(4); 得到 4 个大写随机字符,然而:

很显然,写这个逻辑的同学被这个方法名骗了,咱平日编码严谨点还是得点进去瞄一眼逻辑的。

所以通过 RandomUtil.randomStringUpper 并不一定能得到大写字母,因为可能都随机到数字。

如果说第一个坑我还能理解这位同学,那么第二坑我觉得真的有点秀了。

第二个坑:String randomString = RandomUtil.randomString(allStr.toString(), 18);

这又是几个意思??

好不容易 allStr 拼接了含大写、小写、数字、特殊字符,然后就搁这从中随机取 18 次?

那么问题来了,这18次一定能随机到大写吗?一定能随机到数字吗??

前面辛辛苦苦拼的各种格式的字符,最后靠随机取是吧,一切随缘咯。

你看看,这逻辑实现是不是有点毒。

不过回头想想,我来这公司也挺久了,是第一次收到这个反馈。。。说明之前运气确实不错。

这种随缘代码使用频率不高确实不容易发现问题。

不扯了,突然钉钉又推了一个消息。。线上有报错,容我去排查一波,有必要的话下周分享!

我是yes,我们下篇见!

浏览 158
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报