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

防止SQL注入的客户端校验_配合后端实现双重保障

雨墨大大_8471

雨墨大大_8471

发布时间:2026-03-31 11:41:31

|

925人浏览过

|

来源于php中文网

原创

客户端校验仅提升用户体验,不能替代后端参数化查询和最小权限数据库配置;必须前后端白名单规则一致,所有输入经后端二次校验,禁用字符串拼接SQL。

防止sql注入的客户端校验_配合后端实现双重保障

客户端校验只是障眼法,不能替代后端过滤

前端做 SQL 注入防护,本质是防手误、防低级爬虫,不是防攻击者。只要禁用 JS 或绕过表单提交(比如用 curl 直发请求),所有前端校验都形同虚设。它唯一靠谱的用途,是提升用户体验——让用户输完立刻知道“这个字段不能填单引号”,而不是等几秒后收个 500 错误。

常见错误现象:onsubmit 里写正则过滤 '、;、--,结果用户贴一段带中文全角符号的恶意 payload 就穿过去了;或者只校验输入框,却忘了 select、hidden 字段也能被篡改。

  • 校验必须覆盖所有可提交字段,包括 input[type=hidden]、textarea、select 和动态生成的字段
  • 正则别只盯着 ASCII 特殊字符,String.fromCharCode(8217)(右单引号)这类 Unicode 变体也要处理
  • 不要用黑名单思路(如“禁止 SELECT”),容易漏;优先用白名单(如“只允许字母数字和下划线”)

JavaScript 中最实用的客户端过滤写法

真正能落地的校验,不是拦截所有可疑字符,而是对字段做语义化约束。比如邮箱字段就该走 email 类型 + HTML5 pattern + JS test() 三重确认;搜索关键词可以允许单引号,但必须转义为两个单引号('')再传给后端——前提是后端明确按这个规则解析。

示例:对用户名字段做安全预处理(非拦截,是规整):

function sanitizeUsername(str) {
  return str
    .replace(/'/g, "''") // SQL Server 风格转义,供后端参考
    .replace(/[^\w\u4e00-\u9fa5\-]/g, '') // 只留字母、数字、中文、下划线、短横线
    .slice(0, 32); // 长度截断,防超长 payload
}
  • 避免在客户端做 escape 或 encodeURI,这些对 SQL 解析毫无意义
  • 别调用 eval、Function 构造器拼接字符串,这等于主动开后门
  • 如果用框架(如 React/Vue),确保校验逻辑在 onChange 和 onSubmit 两处都触发,不依赖 DOM 快照

前后端校验不一致时,后端永远以自己为准

前端提示“用户名不能含特殊字符”,后端却接受 @ 和点号——这种不一致会导致两种后果:一是用户困惑(明明按提示填了还报错),二是攻击者发现前端宽松、后端严格,转而专攻后端没覆盖的边界路径(比如 API 直连、旧版接口、批量导入 CSV)。

关键参数差异:max_length、allowed_chars、trim_behavior(是否自动去首尾空格)、null_handling(空字符串算合法还是拒绝)——这些必须前后端配置完全同步,最好从同一份 JSON Schema 生成校验规则。

  • 后端收到数据后,第一件事不是查库,而是重新跑一遍和前端一模一样的白名单正则(哪怕多一次 RegExp.test())
  • 如果后端用了 ORM(如 Sequelize、SQLAlchemy),确认它没被手动拼接进 raw query;where 条件一律走参数化绑定,不用 + 拼字符串
  • 日志里记录被拒绝的原始请求体(脱敏后),方便比对前后端规则偏差

真正防住 SQL 注入,靠的是后端参数化查询 + 最小权限 DB 账户

客户端校验再细,也挡不住直接连数据库的工具(如 mysql -h xxx -u root -p)。唯一可靠防线只有两条:所有查询必须用参数占位符(? 或 $1),数据库账户仅授予必要表的 SELECT/INSERT 权限,禁用 LOAD_FILE、INTO OUTFILE 等高危命令。

性能影响几乎为零,但兼容性要注意:MySQL 的 PREPARE 语句不支持动态表名或列名,这类需求必须靠白名单映射(比如前端传 sort=created_at,后端查表确认它属于 ['id', 'created_at', 'status'] 才放行)。

  • Node.js 用 pg 时,坚持用 client.query('SELECT * FROM users WHERE id = $1', [id]),绝不用 client.query('SELECT * FROM users WHERE id = ' + id)
  • PHP 用 PDO 时,prepare() 后必须 execute(),且绑定值用 bindParam() 或数组传参,不用字符串插值
  • Java 的 PreparedStatement 要注意 setString() 对 null 的处理,别因空指针跳过校验

最容易被忽略的是存储过程调用和动态 SQL 拼接场景——哪怕只拼接字段名,也得走白名单校验,不能因为“看起来不危险”就放开。

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

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

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

蛙蛙写作

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

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

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

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

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

相关专题

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

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

2843

2023.08.11

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

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

7130

2024.03.19

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

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

6646

2024.03.19

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

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

4783

2023.10.12

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

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

971

2023.10.27

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

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

1249

2024.02.23

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

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

6801

2024.03.06

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

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

3503

2024.03.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

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

精品课程

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

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