综合

审阅漏洞

时间:2010-12-5 17:23:32  作者:热点   来源:知识  查看:  评论:0
内容摘要:凌晨两点十七分,我盯着屏幕上的diff输出,突然觉得代码审阅和考古没什么两样——都是在层层叠叠的痕迹里,寻找那个让一切崩塌的裂缝。 这次提交改动不大,只有三十七行。但改动越小,越要警惕。提交信息写着“

凌晨两点十七分,审阅漏洞我盯着屏幕上的审阅漏洞diff输出,突然觉得代码审阅和考古没什么两样——都是审阅漏洞在层层叠叠的痕迹里,寻找那个让一切崩塌的审阅漏洞裂缝。

这次提交改动不大,审阅漏洞只有三十七行。审阅漏洞但改动越小,审阅漏洞越要警惕。审阅漏洞提交信息写着“修复登录状态丢失问题”,审阅漏洞可当你把改动展开,审阅漏洞看到的审阅漏洞却是session存储从cookie换成了localStorage。表面合理,审阅漏洞但问题在于——这个改动没有处理localStorage无法跨域共享的审阅漏洞特性,而项目恰好用了两个子域名。审阅漏洞

真正的审阅漏洞漏洞往往藏在提交信息没说的那部分。我开始逐行看,越看越觉得不对劲。改动里有一个base64解码函数,但传入的参数来自用户可控的URL参数。审阅到这里,我停住了。不是马上断定有漏洞,而是问自己:这个参数为什么需要解码?解码后的数据流向了哪里?顺着调用链往下追,发现解码后的内容被直接拼进了innerHTML。

这就是典型的DOM XSS。攻击者构造一个恶意参数,让页面解码后执行脚本。整个过程没有绕过任何过滤,因为压根没有过滤。写代码的人可能只是图方便,想快速实现一个前端分享功能。但他没意识到,自己顺手开了一扇门。

我见过太多类似的案例。去年有个开源库,一个维护者修改了正则表达式,本意是优化匹配性能,结果却让校验逻辑从“必须匹配”变成了“可选匹配”。所有依赖这个库的密码强度校验全部失效。那个提交只有一行改动,reviewer当时看太快,点了同意。

审阅漏洞最怕的不是漏洞本身,而是审阅者带着“这代码应该没问题”的心态。一旦你预设了结论,就会不自觉地给每个可疑点找合理借口。这跟陪审团制度一个道理——你必须是怀疑论者,哪怕对方看起来再无辜。

回到那个session改动。我最终给出了拒绝合并的意见,附带三个问题:为什么不用现有封装好的session库?跨域方案有没有评估?解码函数的输入是否应该加白名单?被拒的开发者起初有点抵触,但第二天他发了条消息:查了日志,确实有人用恶意参数尝试注入,只是还没成功。他补了个修复,这次加了严格过滤和CSP头。

审阅工作的本质,就是替未来可能踩坑的人提前踩一遍。你不需要懂所有攻击手法,但你必须保持一种本能的警觉——当代码出现“突然的简化”或“意外的复杂”时,停下来,问一句“为什么”。

大多数时候,答案都是无伤大雅的。但偶尔,那个“为什么”会救你一次。就像今晚,凌晨三点零六分,我关掉编辑器,在review记录里写下:拒绝合并,原因见评论。然后去倒了杯水,夜还长,明天还有别的提交等着看。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap