0

0

XML注入与SQL注入的区别 两种常见Web攻击方式对比

畫卷琴夢

畫卷琴夢

发布时间:2026-02-14 11:25:03

|

449人浏览过

|

来源于php中文网

原创

xml注入与sql注入的本质区别在于解析器处理输入的机制不同:xml按结构校验,sql按语法执行;防御需分别针对标签闭合和引号逃逸,不可混用过滤规则。

xml注入与sql注入的区别 两种常见web攻击方式对比

XML注入靠闭合标签,SQL注入靠拼接语句

本质区别不在“注入”二字,而在目标解析器怎么处理输入——XML解析器按结构(标签、属性、嵌套)校验合法性;SQL解析器按语法(关键字、引号、分号)执行语句。所以XML注入的关键是让攻击者能提前闭合当前标签、插入新节点;SQL注入的关键是让单引号或双引号被当作字符串边界,从而逃逸出原始查询逻辑。

  • XML中一个未过滤的 <user><name>${input}</name></user>,若用户输入 <password>123</password><name></name>,就可能绕过校验逻辑,把密码塞进结构里
  • SQL中 SELECT * FROM users WHERE name = ' + user_input + ',若输入 admin' --,单引号闭合后加注释,后面条件直接失效
  • XML不认 --;,SQL也不认 <foo></foo> —— 两者防御点完全不同,不能套用同一套过滤规则

报错回显方式完全不同:XML靠XPath函数,SQL靠数据库函数

盲注场景下,两者都依赖“错误信息泄露数据”,但触发机制和可用函数差异极大。MySQL里常用 extractvalue()updatexml() 强制报错并带出内容;XML注入则依赖解析器对非法XPath或DTD声明的响应,比如用 触发外部实体读取(XXE),但这已属于XML注入的子类,不是所有XML解析器都启用外部实体。

  • SQL报错注入典型payload:SELECT extractvalue(1, CONCAT('~', DATABASE())) → 报错信息含数据库名
  • XML报错注入常见路径:<?xml version="1.0"?> ]><root>&x;</root> → 若解析器未禁用外部实体,会返回base64编码的文件内容
  • 现代XML库(如Java的DocumentBuilder)默认禁用外部实体,但老版本或手动配置开启时风险极高;而SQL注入只要拼接+无预编译,几乎必中

防御写法不能混用:转义位置和粒度完全不同

SQL注入防得住,不代表XML安全;反过来也一样。SQL参数化靠PreparedStatement把值当纯数据绑定;XML安全则要确保用户输入只出现在文本节点内容里,绝不能进标签名、属性名、DTD定义或XPath表达式中。

你好星识
你好星识

你的全能AI工作空间

下载
  • 错误做法:对XML内容做String.replace("'", "''") —— 这对SQL有用,对XML完全无效,因为XML根本不管单引号是不是字符串边界
  • 正确做法:生成XML时用DOM或SAX API写入内容(如element.setTextContent(userInput)),而不是字符串拼接;若必须拼接,对、<code>>&"'做XML实体编码(<等)
  • 特别注意:JSON传参若最终被服务端拼进XML模板(比如日志埋点、配置组装),那JSON字段本身也要按XML规则转义,不是只做JSON转义

实际漏洞常混合出现:XML里藏SQL,SQL里藏XML

真实系统里,XML和SQL很少孤立存在。比如SOAP接口接收XML请求,后端解析后把其中字段拼进SQL;或者Web应用把用户提交的XML存进数据库,再用SQL查出来渲染成页面——这时一处过滤缺失,就可能链式触发两种注入。

  • 典型链路:POST /api/order 提交含<order_id>123</order_id><note><script>alert(1)</script></note> → 后端提取note字段,拼进SQL:INSERT INTO logs(note) VALUES ('<script>...')</script> → 若没转义,既可能XSS,也可能SQL注入(如果note里含' OR '1'='1
  • 更隐蔽的是:XML中的CDATA块本应原样保留,但如果解析后又被不当拼进SQL,CDATA里的内容照样会触发SQL注入
  • 最容易被忽略的一点:日志系统、监控埋点、审计模块往往用最简陋的字符串拼接处理各种输入,它们既不走主业务的SQL预编译,也不走XML安全API,却是注入最常落地的地方

事情说清了就结束。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

922

2023.10.12

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

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

334

2023.10.27

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

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

373

2024.02.23

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

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

1636

2024.03.06

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

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

369

2024.03.06

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

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

1190

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

583

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

433

2024.04.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

23

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.3万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号