site logo

Marico's space

Python 脚本中 5 个常见安全错误及规避方法

编程技术 2026-11-06 11:27:39 10

最近折腾了几个 Python 自动化脚本,顺手把安全相关的问题捋了一遍,结果发现真正容易出事的并不是什么复杂漏洞,而是异常处理、依赖管理、动态执行这些看起来很普通的细节。这篇就把 Python 脚本中 5 个常见安全错误和规避方法说清楚。

1. 异常处理不当

异常处理不完善,意外错误可能会直接暴露给用户,或者让应用毫无提示地崩溃,进而泄露系统路径、调用栈等敏感信息。《Script Python revela errores de seguridad críticos》一文提到,异常处理不当正是最常见的安全漏洞之一。

为什么有问题

  • 未捕获的异常会暴露内部实现细节,为攻击者进行侦察提供线索。
  • 过于宽泛的 try/except 块,例如不指定异常类型的 except:,可能掩盖关键故障,让问题排查变得更困难。

怎么修

  1. 只捕获预期可能发生的异常,并对每种异常分别处理。
  2. 将错误写入安全日志,不要向终端用户打印完整调用栈。
  3. 使用 finally 释放关键资源,例如文件和连接,无论执行过程中是否发生异常。

2. 未验证的第三方依赖

Python 拥有庞大的包生态,但依赖越多,风险也越大。使用未经核验或者长期未更新的依赖,可能把已有漏洞直接带进代码。《Script Python revela errores de seguridad críticos》和《Vulnerabilidades de Seguridad en Python | Principales Problemas》都把不完善、不安全的依赖管理列为反复出现的安全威胁。

主要风险

  • 依赖本身存在可被利用的已知漏洞,例如 C 扩展中的缓冲区溢出。
  • 攻击者向公共仓库发布恶意包,开发者未经审查就直接安装。

最佳实践

  • 使用 pip-audit 或 safety 等工具扫描依赖中的已知安全问题。
  • 在 requirements.txt 中锁定具体版本,并定期更新。
  • 优先选择维护活跃、在开发者社区中口碑较好的包。

3. 不安全地使用动态执行和求值函数

eval()、exec(),以及在 SQL(结构化查询语言)查询中直接拼接字符串,都可能在接收到不可信数据后执行任意代码。多份安全资料都把这类做法列为开发者应该避免的高风险实践。

可能造成的后果

  • 攻击者可以注入 Python 代码,并以脚本自身的权限运行,进而控制整个运行环境。
  • 在 Web(万维网)应用中,代码注入可能导致关键数据泄露或被篡改。

规避方法

  • 用更安全的方案替换 eval() 和 exec(),例如使用 ast.literal_eval() 求值字面量表达式。
  • 使用 ORM(对象关系映射)或参数化查询,不要通过字符串拼接生成 SQL 语句。
  • 处理用户输入前,务必完成验证和清理。

4. 底层漏洞与敏感数据暴露

Python 默认运行在 CPython 上,而 CPython 本身使用 C 语言编写,因此内存层面的漏洞依然不能忽视。《10 problemas de seguridad comunes en Python y cómo evitarlos》和《Los 10 errores de seguridad más comunes en Python y cómo …》都指出,内存分配错误和缓冲区溢出可能影响 C 扩展,并进一步波及依赖这些扩展的 Python 脚本。

此外,把凭据或 API(应用程序接口)密钥直接写进源代码也是常见错误。敏感数据一旦以明文形式保存,代码仓库泄露后就会很容易被窃取。

建议采取的措施

  • 除非绝对必要,否则不要自己编写 C 扩展;如果必须编写,应仔细检查内存管理逻辑。
  • 使用环境变量或密钥管理服务,例如 HashiCorp Vault,避免把凭据写进代码。
  • 将包含敏感信息的文件加入 .gitignore,并确认这些文件没有进入 Git 历史记录。

5. 缺少安全测试和代码审查

最后这个问题看起来没有前面几个那么技术,但影响同样严重:没有把安全测试纳入开发生命周期。《Script Python revela errores de seguridad críticos》引用的经验显示,真实用户发现漏洞的速度比内部 QA(质量保证)团队快 10-15 倍,因为用户会以不可预测的方式使用软件。

如何改进

  • 接入 Bandit 或 SonarQube 等静态分析工具,自动识别不安全代码模式。
  • 开展以安全为重点的代码审查,并确保至少一名其他开发者参与。
  • 发布到生产环境前,在预发布环境中进行渗透测试和模糊测试。

总结

只要把容易被忽略的细节处理好,Python 脚本的安全水平并不会比其他软件差。正确处理异常、负责任地管理依赖和敏感数据,再补上安全测试与代码审查,这些措施都能有效缩小攻击面。

行动建议:
今天就检查一下自己的代码,找出上面描述的至少一个安全漏洞,按照建议完成修复,并把静态分析工具加入日常开发流程。安全不是一次性工作,但每一次改进都有意义。

参考资料

  • Script Python revela errores de seguridad críticos
  • Vulnerabilidades de Seguridad en Python | Principales Problemas
  • 10 problemas de seguridad comunes en Python y cómo evitarlos
  • Los 10 errores de seguridad más comunes en Python y cómo …
  • Problemas de seguridad en Python: riesgos habituales y cómo mitigarlos

披露(DEV 的 AI 规范):本文在 AI(人工智能)辅助下完成——具体助手为运行在 Raspberry Pi 上的自主助手 Jarvis。文章已对照所引用的资料进行核验,并在发布前由 Sergio 审核。