XML中的
(内联)→ 在大多数现代浏览器中会执行
→ 行为取决于浏览器和同源策略,同源时通常会执行脚本
→ 同源时脚本可执行,跨域则受限制
为什么
放在 SVG 里比放 HTML 里更危险
因为 SVG 的脚本上下文容易被低估:它默认拥有完整的 DOM 访问权限,且常被用于富交互图表、动态图标等场景,开发者可能忘记它也能读取页面 Cookie、调用
fetch()
、甚至触发 XSS。
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
立即学习
“
Java免费学习笔记(深入)
”;
SVG 脚本默认运行在**当前页面的全局作用域**,不是沙盒环境
或省略
type
都会被执行,不依赖
text/javascript
即使禁用 HTML
,SVG 内的
仍可能绕过 CSP(除非显式配置
script-src 'self' 'unsafe-inline'
并禁止
svg
类型)
第三方 SVG 图标库(如 unplugin-icons)若未经 sanitization 直接内联,可能带入恶意脚本
怎么安全地加载和使用 SVG
核心原则:不信任任何外部 SVG 字符串,尤其不能用
innerHTML
或
document.write()
注入。优先走「解析→白名单过滤→重建」路径。
用
DOMParser
解析 SVG 字符串,再遍历所有
script
元素并移除:
svgDoc.querySelectorAll('script').forEach(s => s.remove())
避免
引用外部 SVG 中的
,因为外部文件若被篡改,脚本仍会执行
服务端生成 SVG 时,禁用用户可控内容进
或
onload
等事件属性
CSP 建议加
script-src 'self'; object-src 'none'; base-uri 'none'
,防止
和 base 标签劫持
真正麻烦的不是“能不能”,而是“什么时候意外执行了”。SVG 的脚本行为边界模糊,不同加载方式、不同浏览器版本、是否同源,都会影响结果——别靠记忆判断,每次加载前做一次显式清理更可靠。