审阅漏洞
作者:百科 来源:知识 浏览: 【大 中 小】 发布时间:2026-10-17 06:23:42 评论数:
凌晨两点十七分,审阅漏洞我盯着屏幕上的审阅漏洞diff输出,突然觉得代码审阅和考古没什么两样——都是审阅漏洞在层层叠叠的痕迹里,寻找那个让一切崩塌的审阅漏洞裂缝。
这次提交改动不大,审阅漏洞只有三十七行。审阅漏洞但改动越小,审阅漏洞越要警惕。审阅漏洞提交信息写着“修复登录状态丢失问题”,审阅漏洞可当你把改动展开,审阅漏洞看到的审阅漏洞却是session存储从cookie换成了localStorage。表面合理,审阅漏洞但问题在于——这个改动没有处理localStorage无法跨域共享的审阅漏洞特性,而项目恰好用了两个子域名。审阅漏洞
真正的审阅漏洞漏洞往往藏在提交信息没说的那部分。我开始逐行看,越看越觉得不对劲。改动里有一个base64解码函数,但传入的参数来自用户可控的URL参数。审阅到这里,我停住了。不是马上断定有漏洞,而是问自己:这个参数为什么需要解码?解码后的数据流向了哪里?顺着调用链往下追,发现解码后的内容被直接拼进了innerHTML。
这就是典型的DOM XSS。攻击者构造一个恶意参数,让页面解码后执行脚本。整个过程没有绕过任何过滤,因为压根没有过滤。写代码的人可能只是图方便,想快速实现一个前端分享功能。但他没意识到,自己顺手开了一扇门。
我见过太多类似的案例。去年有个开源库,一个维护者修改了正则表达式,本意是优化匹配性能,结果却让校验逻辑从“必须匹配”变成了“可选匹配”。所有依赖这个库的密码强度校验全部失效。那个提交只有一行改动,reviewer当时看太快,点了同意。
审阅漏洞最怕的不是漏洞本身,而是审阅者带着“这代码应该没问题”的心态。一旦你预设了结论,就会不自觉地给每个可疑点找合理借口。这跟陪审团制度一个道理——你必须是怀疑论者,哪怕对方看起来再无辜。
回到那个session改动。我最终给出了拒绝合并的意见,附带三个问题:为什么不用现有封装好的session库?跨域方案有没有评估?解码函数的输入是否应该加白名单?被拒的开发者起初有点抵触,但第二天他发了条消息:查了日志,确实有人用恶意参数尝试注入,只是还没成功。他补了个修复,这次加了严格过滤和CSP头。
审阅工作的本质,就是替未来可能踩坑的人提前踩一遍。你不需要懂所有攻击手法,但你必须保持一种本能的警觉——当代码出现“突然的简化”或“意外的复杂”时,停下来,问一句“为什么”。
大多数时候,答案都是无伤大雅的。但偶尔,那个“为什么”会救你一次。就像今晚,凌晨三点零六分,我关掉编辑器,在review记录里写下:拒绝合并,原因见评论。然后去倒了杯水,夜还长,明天还有别的提交等着看。
