使用bandit扫描python脚本识别高危漏洞,结合cwe过滤、污点追踪和ast/sarif交叉验证确保安全。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你用DeepSeek生成一段Python脚本处理用户上传的文件时,必须确认它不会执行任意命令、读取敏感路径或绕过权限校验,否则可能直接导致服务器被攻陷。
用Bandit做基础安全扫描
安装Bandit并扫描生成的.py文件,它能识别硬编码密码、eval调用、subprocess不安全用法等12类高危模式。
执行 pip install bandit → bandit -r your_script.py,注意观察输出中以“HIGH”或“MEDIUM”标记的项。
【不要跳过 exit_code != 0 的扫描结果】 Bandit返回非零退出码意味着至少发现一处高风险问题,此时必须人工介入,不能仅靠忽略警告继续部署。
注入CWE过滤规则强制聚焦关键漏洞
DeepSeek V4支持在扫描命令中绑定CWE编号,跳过低价值检查,直击真实攻击面。
方法一:命令行参数过滤
deepseek scan --cwe-filter=CWE-79,CWE-89,CWE-121,CWE-22 —path=. —language=python
方法二:配置文件声明
在项目根目录创建 .deepseek-security.yaml,写入:
security:
enabled: true
cwe_whitelist: [79, 89, 121, 22]
① CWE-79 对应XSS,检查是否对HTML输出做转义;
② CWE-89 是SQL注入,验证所有数据库查询是否使用参数化语句;
③ CWE-121 指栈缓冲区溢出,在Python中表现为struct.unpack()未校验输入长度;
④ CWE-22 为路径遍历,重点审查os.path.join()与用户输入拼接的逻辑。
运行时注入污点追踪验证数据流
静态扫描无法捕获运行时动态拼接路径或反射调用,需启动带污点标记的执行环境。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
第一步:安装taint-tracking插件
pip install deepseek-taint-tracer
第二步:在脚本开头插入启用代码
import deepseek_taint_tracer
deepseek_taint_tracer.enable()
第三步:构造恶意输入触发追踪
比如传入 filename="../../etc/passwd",观察控制台是否打印出“Tainted input propagated to open() call at line 47”。
这一步必须用真实攻击载荷测试,模拟用户可控输入,不能只跑正常用例。
交叉比对AST节点与SARIF报告
当Bandit报出“use of exec detected”但你确信那是合法的动态导入时,需深入AST验证是否真有危险节点。
执行 python -m ast your_script.py > ast_dump.txt,打开文件搜索“Exec”或“Call(func=Name(id='exec'))”。
同时运行 deepseek export-sarif --output report.sarif,用VS Code安装SARIF Viewer插件打开,定位同一行号的问题描述。
若AST中该节点实际是 ast.parse() 的参数而非直接执行,且外层有白名单校验,则可判定为误报——【此时必须手动在SARIF中添加 justification 字段,否则CI流水线会拦截】。









