0

0

XML文件能包含JavaScript吗 SVG XML中嵌入脚本的安全风险

月夜之吻

月夜之吻

发布时间:2026-02-14 12:07:03

|

637人浏览过

|

来源于php中文网

原创

xml中的不会执行,因其仅描述结构;但若被html环境误解析(如innerhtml)或svg内联嵌入html,则可能执行,故需显式清理script元素。

xml文件能包含javascript吗 svg xml中嵌入脚本的安全风险

XML 文件里直接写 <script></script> 会执行吗

不会。标准 XML 解析器(比如浏览器的 DOMParser、Node.js 的 libxmljs 或 Python 的 xml.etree.ElementTree)完全忽略 <script></script> 标签,既不解析内容,也不执行。XML 不是可执行格式,它只描述结构。

但注意:如果这个 XML 被当作 HTML 加载(比如用 innerHTML 插入、或通过 document.write()),浏览器会按 HTML 规则解析——这时 <script></script> 就可能被执行。这不是 XML 本身的能力,而是宿主环境“误当 HTML 处理”导致的。

  • 纯 XML 文件(data.xml)用 fetch() 读取后调用 response.xml() → 安全,脚本不激活
  • 把 XML 字符串赋给 div.innerHTML → 危险,浏览器会解析并执行内联 <script></script>
  • new DOMParser().parseFromString(xmlStr, 'text/xml') → 安全,返回的是 XML 文档对象,<script></script> 只是普通元素

SVG 中的 <script></script> 为什么能运行

SVG 是 XML 的一种应用,但浏览器对 image/svg+xml MIME 类型有特殊处理:它既是 XML,又被赋予了部分 HTML 的执行能力。当 SVG 作为独立文件加载(如 <img src="chart.svg" alt="XML文件能包含JavaScript吗 SVG XML中嵌入脚本的安全风险" >),里面的 <script></script> **不会执行**;但嵌入 HTML 页面时(如 <svg>...</svg> 内联,或用 <object></object> / <iframe></iframe> 加载),脚本就可能运行。

  • <img src="plot.svg" alt="XML文件能包含JavaScript吗 SVG XML中嵌入脚本的安全风险" > → SVG 被当图像渲染,脚本被静默忽略
  • <svg><script>alert(1)</script></svg>(内联)→ 在大多数现代浏览器中会执行
  • <object data="plot.svg"></object> → 行为取决于浏览器和同源策略,同源时通常会执行脚本
  • <iframe src="plot.svg"></iframe> → 同源时脚本可执行,跨域则受限制

为什么 <script></script> 放在 SVG 里比放 HTML 里更危险

因为 SVG 的脚本上下文容易被低估:它默认拥有完整的 DOM 访问权限,且常被用于富交互图表、动态图标等场景,开发者可能忘记它也能读取页面 Cookie、调用 fetch()、甚至触发 XSS。

你好星识
你好星识

你的全能AI工作空间

下载

立即学习Java免费学习笔记(深入)”;

  • SVG 脚本默认运行在**当前页面的全局作用域**,不是沙盒环境
  • <script type="application/ecmascript"></script> 或省略 type 都会被执行,不依赖 text/javascript
  • 即使禁用 HTML <script></script>,SVG 内的 <script></script> 仍可能绕过 CSP(除非显式配置 script-src 'self' 'unsafe-inline' 并禁止 svg 类型)
  • 第三方 SVG 图标库(如 unplugin-icons)若未经 sanitization 直接内联,可能带入恶意脚本

怎么安全地加载和使用 SVG

核心原则:不信任任何外部 SVG 字符串,尤其不能用 innerHTMLdocument.write() 注入。优先走「解析→白名单过滤→重建」路径。

  • DOMParser 解析 SVG 字符串,再遍历所有 script 元素并移除:svgDoc.querySelectorAll('script').forEach(s => s.remove())
  • 避免 <use href="#icon"></use> 引用外部 SVG 中的 <script></script>,因为外部文件若被篡改,脚本仍会执行
  • 服务端生成 SVG 时,禁用用户可控内容进 <script></script>onload 等事件属性
  • CSP 建议加 script-src 'self'; object-src 'none'; base-uri 'none',防止 <object></object> 和 base 标签劫持

真正麻烦的不是“能不能”,而是“什么时候意外执行了”。SVG 的脚本行为边界模糊,不同加载方式、不同浏览器版本、是否同源,都会影响结果——别靠记忆判断,每次加载前做一次显式清理更可靠。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

162

2025.12.04

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6462

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

361

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

428

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

96

2025.08.19

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1927

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2102

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1121

2024.11.28

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

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

23

2026.02.13

热门下载

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

精品课程

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

共58课时 | 5.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.3万人学习

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

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