如何在React项目中安全传输参数防止后端API遭受SQL注入

阿枫酱_2655

阿枫酱_2655

2026-09-08

991人浏览

原创

react前端预校验对sql注入零防护力,真正安全依赖后端参数化查询(如pool.execute()、query('select ?', [val]))及用户输入与sql结构完全隔离。

如何在react项目中安全传输参数防止后端api遭受sql注入

React 本身不处理数据库,也拦不住 SQL 注入——攻击者绕过 React 直接发请求,前端校验形同虚设。真正安全的参数传输,只取决于后端是否用 pool.execute()、query('SELECT ?', [val]) 或 ORM 的安全方法(如 User.findOne({ where: { id } })),且所有用户输入必须与 SQL 结构完全隔离。

参数传法错误:GET 拼接 URL 或手动拼 SQL 字符串

这是最常见也最危险的做法。比如在 React 里写:

axios.get(`/api/users?id=${id}&sort=${sort}&limit=${limit}`)

或后端收到后直接拼接:

`SELECT * FROM users WHERE id = ${req.query.id}`

只要 id 是 1 OR 1=1 --,就直接穿透。URL 参数、Header、Body 全部可被篡改,没有例外。

  • GET 请求参数永远不该承载业务逻辑主干(如 ID 查询条件应走路径参数或 POST body)
  • 后端禁止用模板字符串、+、fmt.Sprintf 等方式拼接任何用户输入到 SQL 中
  • 即使用了 mysql_real_escape_string() 模拟,也不等于参数化;宽字节、多编码场景下极易绕过

正确传参方式:结构化 + 明确语义 + 长度/类型前置约束

React 要做的不是“防注入”,而是让后端能干净地拿到可验证的原始值。关键点是:不加工、不截断、不隐式转换、不加引号。

React Router Code Review
React Router Code Review

审查 React Router 代码,确保数据加载、变更、错误处理和导航模式符合规范,适用于 React Router v6.4+ 代码、加载器及其他特性。

下载
  • ID 类字段保持字符串原样传递,不要 Number(id) —— 后端需区分 "123" 和 "123abc",前者可转数字,后者应拒收
  • 搜索关键词、用户名等文本字段,前端限制 maxLength={200} 并检查是否含明显攻击特征(如 "' OR "、"--"),仅提示不拦截
  • 排序字段(sort)、方向(order)必须映射白名单:const allowedSorts = { name: 'name', createdAt: 'created_at' },传错就 fallback 到默认值
  • 多参数场景(如筛选+分页+导出配置共 12 个字段)坚决不用 GET,改用 axios.post('/api/export', { filters, page, size, format })

动态表名/列名:白名单是唯一解,正则过滤是幻觉

参数化查询不支持 WHERE 以外的结构部分。如果你需要根据请求决定查哪张表或按哪个字段排序,就不能靠“过滤掉单引号”来拼接。

错误写法:

const table = req.query.table.replace(/[^a-zA-Z0-9_]/g, '');<br>const sql = `SELECT * FROM ${table} WHERE id = ?`;

正确做法:

const allowedTables = { users: 'users', posts: 'posts', comments: 'comments' };<br>const table = allowedTables[req.query.table] || 'users';<br>const sql = `SELECT * FROM ${table} WHERE id = ?`;
  • 白名单必须硬编码或从配置中心加载,不可运行时生成
  • 字段名、排序字段、GROUP BY、HAVING 子句中的动态部分,全部适用同一规则
  • 别信“我用 Unicode 正则把所有变体都覆盖了”——白名单可审计、可测试、无例外

前后端校验必须一致,否则会掩盖真实漏洞

前端允许邮箱最多 254 字符、必须含 @,后端却只校验 100 字符或忽略格式,会导致用户在前端能提交、后端报错,问题被卡在中间层,反而拖慢定位速度。

  • 校验规则(正则、长度、枚举值)应统一定义在共享 schema 文件中(如 JSON Schema),前后端各自解析执行
  • 前端不实现 escape、quote、encode 等“安全加工”,避免和后端逻辑错位(例如前端加了引号,后端又套一层参数化,结果查的是字符串 "'admin'")
  • 日期统一传 ISO 字符串("2026-08-26"),不传时间戳数字或 Date 对象——类型歧义是拼接温床

最容易被忽略的是:后端每个数据库调用点是否真的用了参数化。哪怕只有一处 sequelize.query(`SELECT * FROM x WHERE y = '${input}'`),整条链路就失效。检查不能靠“用了 ORM 就放心”,而要逐行看 query、$queryRaw、raw() 的调用方式。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

react sql注入 安全传输

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

相关专题

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

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

2023.08.11

2243

5

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

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

2024.03.19

5950

13

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

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

2024.03.19

5266

10

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

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

2023.10.12

3963

8

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

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

2023.10.27

851

4

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

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

2024.02.23

1029

5

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

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

2024.03.06

5821

10

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

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

2024.03.06

2743

4

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

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

2024.04.07

5800

11

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习