0

0

Python 常见安全漏洞的成因分析

舞夢輝影

舞夢輝影

发布时间:2026-02-15 09:43:21

|

923人浏览过

|

来源于php中文网

原创

eval()和exec()对不可控输入必然导致远程代码执行,应禁用并改用ast.literal_eval()或simpleeval;subprocess需禁用shell=true或严格转义;模板渲染须避免|safe,sql查询必须参数化。

python 常见安全漏洞的成因分析

为什么 eval()exec() 一用就中招

它们不是“写错才危险”,而是只要输入不可控,就必然存在远程代码执行风险。Python 的动态特性让字符串直接变成可执行逻辑,攻击者只需传入 "__import__('os').system('rm -rf /')" 这类字符串,就能绕过所有业务校验。

常见错误现象:后台管理页提供“自定义公式计算”或“规则引擎调试框”,用户输入后服务端用 eval() 解析;或者日志里看到 SyntaxError: invalid syntax 以外的异常,实际是攻击尝试失败留下的痕迹。

  • 永远不要对任何外部输入(HTTP 参数、数据库字段、文件内容)调用 eval()exec()
  • 替代方案优先选 ast.literal_eval() —— 它只允许基础字面量(dictliststrint 等),拒绝函数调用和属性访问
  • 如果真要表达式求值(如配置里的阈值公式),用专门的安全库如 simpleeval,并显式禁用 __builtins__ 和危险模块

subprocess.run() 不加 shell=False 会怎样

默认 shell=True(尤其在 Windows 上容易被忽略)会让命令字符串经系统 shell 解析,导致参数注入。比如拼接路径:subprocess.run(f"ls {user_input}"),当 user_input"; rm -rf /",后果直接失控。

使用场景集中在调用外部工具(gitffmpegcurl)或执行系统命令时,尤其在 CI/CD 脚本、运维工具里高频出现。

立即学习Python免费学习笔记(深入)”;

方舟订单管理系统
方舟订单管理系统

系统开发由二当家的编写,代码完全开源,可自行修改源码,欢迎使用! 1、网站采用php语言开发,更安全、稳定、无漏洞、防注入、防丢单。 2、记录订单来路,客户IP记录及分析,订单数据统计 3、订单邮件提醒、手机短信提醒,让您第一时间追踪订单,大大提升了发货效率,提高订单成交率。 4、多种支付方式,包含:货到付款、支付宝接口、网银支付,可设置在线支付的折扣比率。 5、模板样式多样化,一个订单放到多个网

下载
  • 强制设 shell=False(这是默认值,但显式写出更安全)
  • 命令和参数必须拆成列表:subprocess.run(["ls", "-l", user_path]),而非字符串拼接
  • 若必须用 shell=True(如需要管道、通配符),先用 shlex.quote() 对每个变量转义,再拼接

Django/Flask 模板里 {{ user_input }} 为什么不能信

模板引擎默认做 HTML 转义,但一旦用了 |safe|mark_safe 或 Jinja2 的 |safe 过滤器,就等于把 XSS 大门敞开。攻击者传入 <script>alert(1)</script>,后端没清洗就存进数据库,前端一渲染就执行。

容易踩的坑是“我只在后台显示,又不给用户看”,但后台页面本身也是 Web 页面,管理员账号一旦泄露,XSS 可窃取 session、提权操作。

  • 永远假设所有用户输入都是恶意的,包括管理员自己填的富文本、备注字段
  • 避免全局用 |safe;如需渲染 HTML,用 bleach.clean() 白名单过滤标签和属性
  • 敏感操作(删除、权限变更)必须用 CSRF token + POST + 服务端鉴权,不能靠前端隐藏按钮或 JS 判断

SQL 注入在 Python 里不是只有 sqlite3 才有

mysql-connector-pythonpsycopg2、甚至 ORM 的原生查询(session.execute("SELECT * FROM users WHERE name = '" + name + "'"))一样中招。根本原因不是数据库类型,而是字符串拼接 SQL。

性能影响常被忽视:预编译语句(parameterized query)由数据库缓存执行计划,而拼接 SQL 每次都要重新解析,高并发下 CPU 明显升高。

  • 所有参数一律用占位符:cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))(PostgreSQL/MySQL)或 ?(SQLite)
  • ORM 用户别碰 .filter(name__contains=request.GET['q']) 这种裸输入,应先校验格式(如只允许字母数字)或用 Q 对象组合条件
  • 动态表名/字段名无法参数化,必须白名单校验:if table_name not in ["users", "orders"]: 再拼接

最麻烦的其实是“半信半疑”的情况——比如认为“这个字段只来自内部 API,不会被篡改”,结果上游服务被攻破,信任链就断了。安全不是挑地方设防,是每层都按最坏情况设计。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

943

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

334

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

375

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1636

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

369

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1211

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

583

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

434

2024.04.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

76

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号