返回
创建于
状态公开
1. 不会出现问题的情况
<img src="evil.svg">浏览器只把 SVG 当作图像渲染,不会执行内部<script>或事件属性。- 作为 CSS
background-image: url(evil.svg)同样只是图像资源,不会触发脚本。
2. 可能出现问题的情况
🔹 内联 SVG
1<svg>
2 <script>alert('XSS');</script>
3</svg>- 因为这段代码直接在 HTML 里,浏览器会执行里面的
<script>。 - 或者
<circle onload="alert(1)">这样的事件属性也会执行。
🔹 使用 object / iframe / embed 引入
1<object type="image/svg+xml" data="evil.svg"></object>
2<iframe src="evil.svg"></iframe>
3<embed src="evil.svg"></embed>- 这种方式浏览器会把 SVG 当成独立文档解析,其中的脚本是可以运行的。
- 如果 SVG 文件里写了
alert(1),就会真的弹出来。
🔹 服务器 MIME 类型配置错误
- 如果 返回头是
Content-Type: text/html而不是image/svg+xml, 浏览器可能会把 SVG 当作 HTML 来解析,脚本自然会执行。 - 这在一些上传/下载场景里比较危险。
🔹 SVG 内部外链(攻击链)
- SVG 可以内嵌
<image xlink:href="javascript:alert(1)">或<a xlink:href="javascript:...">。 - 在某些老旧浏览器或不严格过滤时可能被利用。
3. 实际风险点总结
- ✅ 安全:
<img>、background-image - ⚠️ 有风险:
<svg>(内联)、<iframe>、<object>、<embed> - ⚠️ 有风险:MIME 类型错误(把 SVG 当 HTML)
- ⚠️ 有风险:SVG 内部引用
javascript:或事件属性