讲师中心 微信公众号
AI工具推荐 视频效率加速

防止SQL注入的后端实现_使用参数化API而非动态拼接

云强酱_4681

云强酱_4681

发布时间:2026-04-04 15:18:33

|

597人浏览过

|

来源于php中文网

原创

字符串拼接SQL危险因用户输入混入语句致SQL注入,参数化查询通过分离结构与数据实现原生防护;Node.js用?占位符、Python Flask用命名参数、Java MyBatis用#{}而非${}。

防止sql注入的后端实现_使用参数化api而非动态拼接

为什么字符串拼接 SQL 就是危险的

因为用户输入直接混进 SQL 语句里,数据库根本分不清哪段是逻辑、哪段是数据。比如用户传个 ' OR '1'='1,拼出来可能变成 SELECT * FROM users WHERE name = '' OR '1'='1',整张表就裸奔了。

参数化查询把「结构」和「数据」彻底分开:SQL 模板固定,参数由驱动层安全转义后送入执行引擎——这是数据库原生支持的安全机制,不是靠正则或过滤能替代的。

Node.js 中用 mysql2 做参数化查询的写法

别用 connection.query('SELECT * FROM t WHERE id = ' + req.query.id),这等于开门揖盗。

  • ✅ 正确姿势:用 ? 占位符,参数以数组形式传入第二个参数,如 connection.query('SELECT * FROM users WHERE id = ?', [req.query.id])
  • ✅ 多参数用多个 ?,顺序必须严格对应数组元素位置:query('INSERT INTO t(a,b) VALUES (?, ?)', ['x', 42])
  • ❌ 不要手动拼接对象属性:req.body.name 不能直接插进 SQL 字符串,哪怕你 trim 过、转义过也不行
  • ⚠️ 注意:IN 子句不支持单个 ? 展开数组,得动态生成占位符,比如 WHERE id IN (?, ?, ?) 再传三个值

Python Flask + SQLAlchemy 里绕不开的坑

很多人以为用了 ORM 就自动防注入,其实不然——session.execute() 或原生 text() 查询如果拼接字符串,照样中招。

  • ✅ 安全写法:用 session.execute(text("SELECT * FROM users WHERE name = :name"), {"name": request.args.get("name")}),用命名参数 + 字典传入
  • ✅ 更推荐走 ORM 查询接口:User.query.filter(User.name == request.args.get("name")).all(),它底层自动参数化
  • ❌ 危险写法:text(f"SELECT * FROM users WHERE name = '{request.args.get('name')}'"),f-string 一上,防线就垮
  • ⚠️ 注意:filter_by() 只支持等值匹配且键名固定,动态字段名(比如用户选排序字段)不能用它,得走 text() + 参数化,别偷懒

Java MyBatis 的 #{} 和 ${} 到底差在哪

#{} 是预编译参数占位符,MyBatis 会把它转成 JDBC 的 ?;${} 是纯字符串替换,连引号都不加,拼完直接进 SQL——这就是绝大多数 MyBatis 注入漏洞的根源。

  • ✅ 所有用户可控输入,一律用 #{} ,比如 WHERE username = #{username}
  • ❌ 禁止在 ${} 里放任何外部输入,像 ORDER BY ${sortBy} 是高危操作,必须白名单校验后硬编码
  • ⚠️ 特殊场景如动态表名、列名,无法参数化,只能做严格白名单控制:if (!Arrays.asList("users", "orders").contains(tableName)) throw new IllegalArgumentException();
  • ? 提示:开启 MyBatis 的 logImpl=STDOUT_LOGGING,看实际执行的 SQL,能快速识别出哪些地方偷偷用了 ${}

真正难的不是写对一行参数化代码,而是所有入口——搜索、导出、排序、条件组合——都得绷着这根弦。漏掉一个 ${},或者一次手抖的字符串拼接,整个防护就形同虚设。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2403

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6230

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5606

2024.03.19

大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

4876

2023.06.21

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

1249

2025.12.08

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

243

2026.01.05

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

466

2026.01.05

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

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

4163

2023.10.12

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

40

2026.10.10

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn