Python开发者每年从PyPI拉取超过150亿次安装包,但绝大多数人从没想过:这些代码里藏着什么。
荷兰网络安全顾问Maikel Mardjan干了件"反常识"的事——他花三年业余时间,造了一款能在浏览器里跑的Python代码审计工具。不用装Python,不用配环境,打开网页扔进去一个包,10秒内告诉你里面有没有安全隐患。
为什么现有的开源工具"不好用"
Mardjan在博客里的吐槽很直接:现有的开源SAST(静态应用安全测试)工具,对只想快速扫一眼包的人来说"远不够简单"。
他描述了一个典型场景:你只有10秒钟决定要不要用某个PyPI模块,但现有工具要么得折腾配置,要么得把代码上传到SaaS平台——你的源代码,就这样交给了别人的服务器。
这触及了一个行业顽疾。安全工具的设计者往往假设用户有充足的时间和专业知识,但真实开发场景是:依赖项更新提示弹出来,你点"升级"前只想确认一件事——这版有没有埋雷。
Mardjan的解决方案是"零安装"(Zero Install)。他把整个扫描引擎编译成WebAssembly(WASM),塞进浏览器里跑。WASM是一种二进制指令格式,能让C/Rust等语言写的代码在浏览器中以接近原生的速度执行。
浏览器沙盒成了"天然隔离舱"
用WASM做安全扫描有个意外的好处:浏览器的安全沙盒机制。
过去25年,浏览器厂商为了防恶意网站,把JavaScript执行环境锁得死死的。同源策略、内容安全策略、站点隔离……这些原本用来保护用户上网安全的机制,现在成了保护代码审计工具的"免费保镖"。
Mardjan在博客里写得很明白:「代码在你的浏览器高度隔离的沙盒环境中执行」。换句话说,扫描过程不碰你的本地文件系统,不建后台服务,分析完就销毁。
这对企业用户尤其关键。很多公司明令禁止把内部代码上传到第三方平台,但开发团队又需要快速评估开源组件。浏览器本地跑的方案,恰好卡在"合规"和"效率"的中间地带。
CLI到Web的"减法"逻辑
这个工具其实有前身。Mardjan先做了一个本地命令行版本,用法极简:
codeaudit filescan <包名|目录|文件> [报告名.html]
但他觉得还不够。命令行意味着要装Python、要配依赖、要处理版本冲突——对非Python开发者或者临时需要扫个包的人来说,门槛还是高。
Web版的逻辑是:把"安装成本"降为零,把"使用成本"降到一次点击。
技术实现上,这要求把整个Python运行时+扫描引擎+规则库打包成WASM模块。Mardjan没透露具体体积,但参考类似项目,完整工具链通常在10-50MB之间。现代浏览器加载这个量级的一次性应用,体验已经相当流畅。
为什么拒绝"AI+SaaS"的流行配方
Mardjan在博客里明确划了两条红线,都和当下安全工具的热门方向对着干。
第一条是「隐私优先:本地分析,数据永不离开你的机器」。第二条更尖锐:「避免用AI代理做网络安全」,理由是「大多数Python安全测试的AI工具远不够好」,以及「有价值的源代码绝不该传到你无法控制的SaaS解决方案」。
这针对的是一类新兴产品:把代码传到云端,用大模型做漏洞分析。厂商的宣传通常是"更智能、更全面",但Mardjan的质疑很实际:你的代码在别人的GPU上跑,训练数据怎么处理的?日志存多久?有没有第三方审计?
「好的安全意味着没有'通过隐匿实现安全'(security by obscurity)」,他在博客里写道。这是密码学里的经典原则——系统安全性不该依赖于实现细节保密,而该建立在公开可验证的机制上。SaaS黑箱恰恰反其道而行。
FOSS工具的生存悖论
Mardjan提到一个尴尬现状:高质量的开源Python SAST工具"非常有限"。
这不是技术问题,是经济问题。静态分析需要持续更新的规则库来跟踪新漏洞(比如每周披露的CVE),需要维护多版本Python的兼容性,需要处理越来越复杂的打包格式。这些全是苦活累活,但开源模式很难为此持续筹资。
商业SAST厂商的应对方式是订阅制+封闭生态。他们有足够的动力养一个安全研究团队,但代价是你的代码得进他们的系统。Mardjan的WASM方案试图走第三条路:工具开源免费,运行成本摊给用户的浏览器算力。
这种模式能走多远,取决于社区贡献度。规则库更新、误报率优化、新Python版本适配——这些都需要人。但至少,它把"用不用这个工具"的决策权,从采购流程手里抢回来,还给了单个开发者。
扫描之外:PyPI的信任危机
这个工具的出现时机,恰逢PyPI安全事件的密集曝光期。
2023年以来, researchers 多次发现恶意包通过typosquatting(拼写抢注)和依赖混淆攻击开发者。攻击者上传名字和流行包差一个字符的模块,或者把内部依赖名抢注成公开包,等着CI/CD管道自动拉取。传统杀毒软件对这种"合法渠道分发的恶意代码"几乎无效。
Mardjan的工具不解决所有问题——它扫的是静态代码,不是运行时行为;它依赖已知漏洞模式,对全新攻击手法有盲区。但它的价值在于"降低审计门槛":以前只有安全团队会做的事,现在普通开发者随手就能做。
这种"民主化"有双面性。更多人参与审计意味着更快发现恶意包,但也可能制造噪音——误报导致开发者对警告麻木,最终关掉工具。平衡精准度和覆盖度,是Mardjan接下来要面对的硬仗。
他在博客结尾放了一个试用链接,没有订阅框,没有功能对比表,只有一行字:「Launch the Python Code Audit Web Scanner」。点进去,拖进去一个.py文件或输入包名,等几秒,报告就出来了。
这个交互设计本身就在回答一个问题:安全工具能不能像测网速一样简单?如果答案是肯定的,为什么行业里大多数产品都在往反方向走——越来越重的客户端,越来越复杂的定价,越来越模糊的隐私条款?
Mardjan没说的潜台词或许是:当"免费开源"和"零安装"同时成立,那些收着年费还要求你上传代码的厂商,准备怎么解释自己的溢价?
热门跟贴