一段负责验证登录令牌的代码,打开之后只有一行有效逻辑:return true。这段代码来自一位匿名投稿者,他把它发了出来,而它正跑在生产环境里。
任何令牌都能过
打开网易新闻 查看精彩图片
这段函数的签名很正经:接收一个字符串形式的令牌,返回一个布尔值,表示令牌是否有效。函数体里留着一句 //TODO,紧接着就是 return true。也就是说,无论传进来的是什么,它都会回答"有效"。
投稿者说,这玩意儿正在生产环境运行。他还补充了一个细节:用户登录后,身份是在会话开始时单独记录的。这让冒充别人稍微难了一点,但就认证这件事本身而言,任何令牌都能通过。
为什么它还能活着
从表面看,这段代码并非完全裸奔。会话开始时单独记录用户身份,意味着即使令牌校验形同虚设,系统里仍然有一层身份追踪。问题在于,认证环节本该是拦住陌生人的那道门,现在这道门被拆掉了,只剩下门框。
那句 //TODO 是整件事里最耐人寻味的地方。它说明写代码的人知道这里需要补,只是没补。而它没有被补上,还一路走到了线上,说明从提交到部署的某个环节,没有人注意到这个函数从来没有真正拒绝过任何人。
一个函数,两种读法
支持"先上线再说"的一方会说:功能跑通了,身份另有记录,风险可控,TODO 迟早会补。反对的一方只问一句:如果任何令牌都有效,那这个函数存在的意义是什么?它没有验证任何东西,只是让调用方以为验证过了。
判断其实不难。一个验证函数的价值,在于它能返回 false。只会返回 true 的验证函数,不是验证函数,是一个占位符。而占位符跑在生产环境里,本身就是答案。
热门跟贴