如何修复因为SQL注释符导致的后端逻辑绕过注入漏洞?

大强大大_6869

大强大大_6869

2026-06-17

910人浏览

原创

注释符本身不是漏洞,而是被滥用的语法工具;真正漏洞在于后端用字符串拼接构造sql且未参数化处理,过滤注释符易被绕过,必须改用预编译参数化查询。

如何修复因为sql注释符导致的后端逻辑绕过注入漏洞?

直接回答:注释符本身不是漏洞,而是被滥用的语法工具;真正的问题是后端用字符串拼接构造SQL,且未对用户输入做参数化处理。修复核心不是“封注释符”,而是切断输入与SQL执行逻辑的耦合。

Movio
Movio

一款以AI数字人为核心的视频制作工具,可创建虚拟人物出镜的讲解视频,适合企业培训、营销和知识内容制作。

下载

为什么过滤 --、#、/* */ 会失败?
  • 注释符只是SQL语法的一部分,不是攻击 payload 的必要成分
  • 攻击者可用 AND '1'='1、OR 'a'='a 等逻辑闭合绕过注释需求
  • 过滤规则若只做简单字符串替换(如 str_replace('--', '', $id)),极易被双写(-- --)、编码(%2d%2d)、内联注释(/<em>!</em>/)绕过
  • 某些数据库(如 MySQL)在特定上下文中允许无注释的语句截断,例如 id=1' AND 1=1 UNION SELECT ... '1'='1

必须用参数化查询替代拼接
  • 所有动态拼入 SQL 的变量,无论是否含单引号、分号或注释符,都应走预编译参数通道
  • PHP 示例:$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$id]);
  • Python 示例:cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
  • Node.js(PostgreSQL):client.query("SELECT * FROM users WHERE id = $1", [id])
  • 关键点:参数值不会被解析为 SQL 语法,哪怕它包含 --、UNION 或换行符,也只会作为字符串字面量传入

不要依赖黑名单过滤注释符
  • 黑名单永远滞后:MySQL 支持 --、#、/<em> </em>/;SQL Server 支持 --、/<em> </em>/;Oracle 同样支持多种注释形式
  • URL 编码、宽字节、多层编码(如 %252d%252d)可绕过简单正则匹配
  • 若业务层真需校验输入格式(如 ID 必须为数字),应走白名单 + 类型强制:intval($id) 或 filter_var($id, FILTER_VALIDATE_INT),而不是检查是否含 --
  • 即使你清掉了所有注释符,攻击者仍可用 id=1' OR 1=1 AND '1'='1 构造等效逻辑

容易被忽略的边界场景
  • ORDER BY、GROUP BY、LIMIT 子句不支持参数化,必须用白名单校验字段名或数值范围
  • 动态表名/列名无法参数化,需严格映射到预定义枚举(如 $allowed_tables = ['users', 'orders']; if (!in_array($table, $allowed_tables)) die();)
  • ORM 框架(如 Laravel Eloquent、Django ORM)默认安全,但手动写 raw query 时仍可能引入拼接风险
  • 错误信息泄露(如直接输出 MySQL 报错)会暴露 SQL 结构,让攻击者精准构造绕过语句,应关闭调试模式并自定义错误页

注释符只是撬棍,真正被撬开的是没上锁的 SQL 构造逻辑。只要还在拼字符串,过滤再多符号也只是给门加纸糊的补丁。

相关文章

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

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

下载

相关标签:

sql注入

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

相关专题

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

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

2023.08.11

2163

5

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

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

2024.03.19

5770

13

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

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

2024.03.19

5066

10

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

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

2023.10.12

3843

8

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

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

2023.10.27

831

4

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

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

2024.02.23

1009

5

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

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

2024.03.06

5661

10

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

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

2024.03.06

2623

4

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

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

2024.04.07

5640

11

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP开发基础之数据库篇(PDO)
PHP开发基础之数据库篇(PDO)

共10课时 | 2.3万人学习