SQL注入防御技术方案_基于正则表达式的输入清洗

正则清洗不能防SQL注入,因其无法覆盖宽字节、编码混淆、函数嵌套等绕过方式;真正有效的是参数化查询、白名单校验字段名、最小数据库权限。正则清洗不能防SQL注入,别再写了正则表达式做输入清洗,对SQL注入基本无效。它既无法覆盖所有绕过方式,又容易因规则宽松放行恶意载荷、或规则严格误杀合法输入。真实攻击者早就不靠 ' 或 UNION 明文出现来注入了------用宽字节、注释符、编码混淆、函数嵌套,WHERE id = 1 AND (SELECT ...) 这类结构连正则都难识别边界。为什么 preg_replace + 黑名单永远漏报常见做法是用 preg_replace 过滤 SELECT、INSERT、--、/* 等关键词,但问题极多:大小写绕过:SeLeCt、%53%45%4c%45%43%54(URL编码)都不匹配内联注释干扰:SEL/**/ECT、SELEC/*abc*/T 拆开关键词仍可执行空格非必须:SELECT(id)FROM 在 MySQL 中合法,且无空格就逃过空格依赖型正则函数嵌套绕过:EXTRACTVALUE(1,CONCAT(0x7e,(SELECT ...))) 里没有一个关键词在黑名单中真正该用的三件事:参数化 + 白名单 + 最小权限防御SQL注入只有三条硬路,缺一不可:所有动态拼接的查询,必须用 mysqli_prepare 或 PDO::prepare + bind_param,变量进 ? 占位符,数据库引擎自动隔离语义若必须拼接表名/字段名(如动态排序),只允许从预定义白名单中取值:valid_fields = \['name', 'created_at', 'status'\];,用 in_array(input, $valid_fields, true) 校验数据库连接账号去掉 FILE、PROCESS、GRANT OPTION 等高危权限,限制只能查指定库表正则唯一能用的场景:格式校验,不是防注入正则可以且应该用在「输入是否符合业务格式」上,和SQL安全无关: RedClaw 百度推出的手机端万能AI Agent助手

相关推荐
卷无止境9 分钟前
从一个装饰器说起:拆解 Python 的 @property
后端·python
农村小镇哥10 分钟前
python操作配置文件ini
开发语言·python
AAA@峥1 小时前
系统化学习 MySQL:数据类型、库表管理、增删改查全解析
数据库·学习·mysql
流星白龙8 小时前
【Redis】2.Redis重大版本
数据库·redis·junit
流星白龙8 小时前
【Redis】7.Hash表
数据库·redis·哈希算法
love530love8 小时前
OpenClaw Windows Companion 桌面客户端 连接 LM Studio 完整配置指南
人工智能·windows·python·openclaw
流星白龙9 小时前
【Redis】4.基本全局命令
数据库·redis·缓存
王八八。10 小时前
Navicat 17破解版下载安装教程 附安装激活步骤(2026 最新版)
数据库·navicat
cui_ruicheng10 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
Jelena1577958579211 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库