有没有什么方法可以让用户上传的SVG图像免受代码注入等的影响
Is there any way to make user uploaded SVG images safe from code injection etc?
我想在网站上显示用户上传的SVG图像,但它们很容易被利用:
- https://security.stackexchange.com/questions/11384/exploits-or-other-security-risks-with-svg-upload
- https://security.stackexchange.com/questions/36447/img-tag-vulnerability
例如,可以在SVG中嵌入任意javascript。性能利用也有问题,但我认为这些问题的优先级较低。
是否有任何机制可以使SVG在某种程度上安全,并仅将其用作图像?我可以简单地信任<img src="/media/user-uploaded-image.svg" />
吗?
Wikipedia/Wikmedia Commons托管SVG文件。有人知道他们采取了什么措施来防止SVG漏洞吗?
Wikipedia/Wikmedia Commons托管SVG文件。有人知道他们采取了什么措施来防止SVG漏洞吗?
它们从一个单独的主机名(特别是upload.wikimedia.org
)提供上载的文件。你可以随心所欲地将站点脚本跨到那里,但它不会给你带来任何好处:它与en.wikipedia.org
生活在不同的起源,无法接触其cookie或与脚本交互。
这最终是处理文件上传的唯一无懈可击的方法,也是大多数大玩家所做的。当你允许任意文件时,很难彻底扫描所有模糊的XSS可能性。
我可以简单地信任
<img src="/media/user-uploaded-image.svg" />
吗?
<img>
做什么其实并不重要——用户只需直接导航到SVG地址,它就会在网站的原始位置执行整个页面的脚本。
如果将SVG嵌入为<image>
,它应该无法执行脚本。请参见此处:https://www.w3.org/wiki/SVG_Security
当然,您也可以在处理之前解析文档,并应用与html文件相同的过滤器和正则表达式。
还要注意(据我所知)SVG请求任意外部图像的能力是一种攻击载体。
- 在轴上旋转SVG图像
- 用图像替换SVG
- 将包含SVG元素的HTML转换为图像文件
- 将SVG下载为PNG图像
- 如何设置SVG路径的样式以拍摄图像
- 无法将包含文本和图像的SVG保存到画布
- 如何在fabricjs中嵌入图像base64将画布转换为SVG
- 如何在d3.js中填充svg圆圈内的图像
- 在内联html img标记中显示带有图像标记的SVG
- 如何在悬停时更改SVG图像的颜色
- Javascript:如何将SVG图像放入数组中
- 将 src 内容动态加载到 SVG 图像
- 根据窗口大小调整 HTML 中 SVG 图像的大小
- 在web浏览器中保存操作过的SVG图像
- SVG具有旋转图像的低性能
- 添加图像与点svg画布
- 正在尝试在SVG标记中显示图像URL
- 使用jquery/javascript将amchart(多个SVG)保存为图像(jpg)
- 在背景图像svg中使用JavaScript
- 下载图表JOINTJS图像|SVG==>带有Javascript的PNG