将Bandit安全测试加入Makefile时报错make: *** [bandit] Error 1求助
问题原因及解决方案
核心原因
Bandit 在检测到安全漏洞时会返回退出码1,而 Make 会将任何非0的命令退出码视为执行失败,因此即使你能看到正常的安全报告,Make 仍会抛出make: *** [bandit] Error 1的错误。
单独执行命令时,Shell 默认不会因退出码1终止执行,但 Make 对命令退出状态的检查更严格,只要非0就判定目标执行失败。
解决方案
根据你的需求,有两种常用处理方式:
方式1:区分“检测到漏洞”和“执行出错”
如果希望仅在 Bandit 真正执行出错(比如配置文件无效、路径不存在)时触发 Make 错误,而检测到漏洞时只输出报告不报错,可以修改 Makefile 命令:
.PHONY: bandit bandit: pip install bandit && bandit -c pyproject.toml -r . --confidence-level high -f json -q || [ $$? -eq 1 ]
这个写法的逻辑是:若 Bandit 返回退出码1(仅检测到漏洞),则判定命令成功;只有返回其他非0码(代表执行出错)时,才让 Make 报错。
方式2:强制 Bandit 始终返回0退出码
如果你不需要区分两种情况,只想让命令稳定执行并输出报告,可以使用 Bandit 的--exit-zero参数,让它无论是否发现漏洞都返回0:
.PHONY: bandit bandit: pip install bandit && bandit -c pyproject.toml -r . --confidence-level high -f json -q --exit-zero
注意:这种方式会掩盖 Bandit 真正的执行错误,仅适合只关心报告输出、不要求流水线因漏洞失败的场景。
补充建议
在 GitHub Actions 流水线中,若你的预期是“检测到漏洞时让流水线失败”,那当前的报错是正常的——这正是安全测试的预警机制,你需要根据报告修复漏洞后,流水线才会正常通过。
内容的提问来源于stack exchange,提问作者Cady Li
相关产品推荐
相关产品推荐

