You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

doctest因基于exec()比unittest或pytest风险更高?安全疑问

为什么doctest比unittest/pytest更容易出现安全问题?
  • 触发场景更隐蔽,防不胜防:unittest和pytest的测试代码都在专门的测试文件里,只有你主动敲pytest或者python -m unittest这类命令才会执行。但doctest的代码是嵌在文档字符串里的,很多你没预料到的场景都会触发它:比如有人导入模块后用help()看文档,或者用Sphinx自动生成文档时默认会跑doctest验证示例,甚至有些IDE在解析模块代码时会偷偷执行doctest——这些情况根本不需要你主动去跑测试,恶意代码就悄咪咪执行了。

  • 执行逻辑的安全性更差:doctest为了模拟交互式控制台的输入输出,直接用exec()来运行文档里的代码片段,几乎没有任何沙箱限制。而unittest和pytest虽然也能执行任意代码,但它们的测试代码是放在明确的测试上下文里的,你很清楚哪些是测试代码,会刻意去检查;但doctest把测试混在文档里,很容易被忽略——比如你复制了一段别人的示例文档到自己的代码里,根本没注意里面藏了恶意代码,一导入模块就中招。

  • 传播范围更宽,风险覆盖面大:文档字符串是模块、函数的一部分,会跟着代码一起打包分发。比如你装了个第三方包,它的模块文档里藏了恶意doctest代码,只要你导入这个包,就可能触发。而unittest/pytest的测试文件通常不会被打包进发布的包(除非特意配置),就算有恶意测试代码,你不主动跑测试也碰不到。

内容的提问来源于stack exchange,提问作者Pahbloo Marks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:10:58