SVG造成XSS

我们在一张SVG图片里面插入一个JavaScript代码

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
<script>alert(1)</script>
</svg>

<svg> 是所有 SVG 图形的根元素,必须存在且唯一,用于定义图形的 “画布” 范围、命名空间等基础属性,其属性解析如下:

  • xmlns="http://www.w3.org/2000/svg"
    这是 XML 命名空间(XML Namespace),用于告诉解析工具(浏览器、图形软件):“这个文件中的标签(如 <circle><rect>)属于 SVG 标准,而非其他 XML 格式(如 HTML、XML 配置文件)”。如果省略该属性,部分旧版工具可能无法正确识别图形,导致显示异常。
  • version="1.1"
    指定使用的 SVG 版本为 1.1(目前主流版本,兼容性最好;后续版本如 2.0 虽功能更丰富,但部分工具支持尚未完全普及)。

2. 图形标签 <circle>:绘制圆形的 “指令”

<circle> 是 SVG 中用于绘制正圆形的专用标签(类似的还有 <rect> 画矩形、<line> 画直线、<path> 画复杂路径等)。

本地打开场景(直接双击运行)

  • 若你的默认 SVG 打开方式是浏览器(如 Chrome、Edge、Firefox),浏览器会解析并执行<script>标签中的代码:
    • 基础危害:弹出alert(1)对话框,干扰操作。
    • 潜在风险:若脚本被修改(例如替换为窃取本地 Cookie、读取本地文件的代码),可能泄露敏感信息(取决于浏览器对本地文件的权限限制,现代浏览器对此有一定防护,但仍存在绕过可能)。
  • 若默认打开方式是纯图形工具(如 Photoshop、系统自带的图片查看器),这类工具通常只解析 SVG 的图形渲染代码,会忽略<script>标签,此时无风险。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注