Python 代码审计:常见的注入漏洞与静态检测工具
·
Python 代码审计:常见的注入漏洞与静态检测工具
一、常见注入漏洞类型
-
SQL 注入
当用户输入直接拼接 SQL 查询时产生:# 漏洞示例 query = "SELECT * FROM users WHERE name = '" + user_input + "'" cursor.execute(query) # 攻击者可输入 `' OR 1=1 --` 绕过验证修复方案:使用参数化查询
cursor.execute("SELECT * FROM users WHERE name = ?", (user_input,)) -
命令注入
通过os.system或subprocess执行未过滤的用户输入:# 漏洞示例 os.system("ping " + user_input) # 输入 `8.8.8.8; rm -rf /` 可执行恶意命令修复方案:使用
shlex.quote()过滤或避免直接调用 shellsubprocess.run(["ping", user_input], check=True) -
模板注入
模板引擎(如 Jinja2)中直接渲染用户输入:# 漏洞示例 template = Template("Hello {{ name }}!") template.render(name=user_input) # 输入 `{{7*7}}` 可泄露计算能力修复方案:严格过滤输入或使用沙箱环境
-
路径遍历
未校验用户提供的文件路径:# 漏洞示例 with open("/var/www/" + user_input) as f: # 输入 `../../etc/passwd` 可读取敏感文件修复方案:使用
os.path.abspath()和白名单校验
二、静态检测工具推荐
-
Bandit
- 功能:专为 Python 设计的 AST 分析工具,检测 SQL 注入、命令执行等漏洞
- 安装:
pip install bandit - 使用:
bandit -r ./project_dir # 扫描整个项目 bandit -f html -o report.html # 生成 HTML 报告
-
Pylint
- 功能:通用代码质量分析,通过插件支持安全检查(如
pylint-plugin-security) - 安装:
pip install pylint pylint-plugin-security - 配置:在
.pylintrc中添加:load-plugins=pylint_plugin_security
- 功能:通用代码质量分析,通过插件支持安全检查(如
-
Semgrep
- 功能:基于模式的跨语言检测工具,支持自定义规则
- 安装:
pip install semgrep - 使用:
semgrep --config "p/python" # 使用官方规则库 semgrep --config ./custom_rules.yaml # 自定义规则
-
Safety
- 功能:依赖包漏洞扫描(如 CVE 漏洞库)
- 安装:
pip install safety - 使用:
safety check
三、审计流程建议
-
自动化扫描
使用上述工具进行初步筛查,重点关注高风险函数:- SQL 操作:
execute()、executemany() - 命令执行:
os.system()、subprocess.Popen() - 文件操作:
open()、shutil.copy()
- SQL 操作:
-
手动验证
- 检查用户输入是否经过过滤(如正则表达式、类型转换)
- 验证敏感操作是否有权限控制
- 测试边界值和异常输入(如空值、超长字符串)
-
持续集成
将工具集成到 CI/CD 流程(示例 GitHub Actions 配置):jobs: security_scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run Bandit run: pip install bandit && bandit -r .
关键原则:始终遵循 最小权限原则 和 输入验证原则,避免信任任何未经验证的用户输入。
更多推荐
所有评论(0)