md!这代码有毒原创
你好,我是yes。
刚想周五下午摸个鱼,直接一个钉钉消息打破了我的计划:有个bug。
我说:啥bug?
对方说:刚申请的内部用户的账号登录不上去。
我说:还有这种事,报啥错?
登录的时候报了这个错:
他的密码是这个的:
我瞄了一眼,这明显不含大写啊,你让他密码改成含大写的就行了。
对方有点懵:关键这密码是初始生成的密码啊!他现在登都登不上咋改!管理员重置密码的功能也都没做。
我:???初始密码生成竟然没大写。
我直接一波探索,找到了那块逻辑:
乍一看没啥毛病。。实则毛病挺大:
首先用的是 hutool 的 RandomUtil。
从代码逻辑来看,是想通过 RandomUtil.randomStringUpper(4)
; 得到 4 个大写随机字符,然而:
很显然,写这个逻辑的同学被这个方法名骗了,咱平日编码严谨点还是得点进去瞄一眼逻辑的。
所以通过 RandomUtil.randomStringUpper
并不一定能得到大写字母,因为可能都随机到数字。
如果说第一个坑我还能理解这位同学,那么第二坑我觉得真的有点秀了。
第二个坑:String randomString = RandomUtil.randomString(allStr.toString(), 18);
这又是几个意思??
好不容易 allStr 拼接了含大写、小写、数字、特殊字符,然后就搁这从中随机取 18 次?
那么问题来了,这18次一定能随机到大写吗?一定能随机到数字吗??
前面辛辛苦苦拼的各种格式的字符,最后靠随机取是吧,一切随缘咯。
你看看,这逻辑实现是不是有点毒。
不过回头想想,我来这公司也挺久了,是第一次收到这个反馈。。。说明之前运气确实不错。
这种随缘代码使用频率不高确实不容易发现问题。
不扯了,突然钉钉又推了一个消息。。线上有报错,容我去排查一波,有必要的话下周分享!
我是yes,我们下篇见!