dom型xss风险点需从浏览器端入手,重点追踪javascript中用户输入直接写入dom的操作:全局搜索location.search、location.hash等数据源及innerhtml、eval等sink函数,结合sources和elements面板动态验证。

HTML网站安全检测不是靠一次扫描就能过关的事,关键在于分场景盯住数据流向——用户输入从哪来、在哪儿被渲染、有没有被信任过头。所有漏洞都藏在“没转义”“没校验”“没隔离”这三类疏忽里。
怎么快速定位 DOM 型 XSS 风险点
DOM 型 XSS 不经过服务器,纯前端触发,所以查代码得从浏览器端入手。重点不是看 HTML 结构,而是找 JavaScript 里那些把用户输入直接塞进 DOM 的操作。
- 用浏览器开发者工具的
Sources面板全局搜索:location.search、location.hash、document.referrer、localStorage.getItem—— 这些是典型的数据源(source) - 接着搜 sink 函数:
innerHTML、outerHTML、document.write、eval、setTimeout、src属性赋值(如script.src = ...) - 在
Elements面板里手动改 URL 参数,比如加#<img src="https://img.php.cn/?x-oss-process=image/resize,p_40" alt="HTML网站安全检测与漏洞排查完整教程">,再刷新看是否执行;别只信控制台没报错,要真看到弹窗或 DOM 变化才算复现 - 注意:现代框架(React/Vue)默认对插值做转义,但一旦用了
v-html或dangerouslySetInnerHTML,就等于主动打开后门,必须配DOMPurify.sanitize()再写入
外链标签漏加 rel="noopener noreferrer" 怎么批量扫
漏掉这个属性会让目标页通过 window.opener 控制原页面,是钓鱼和跳转劫持的温床。CMS 导入、富文本粘贴、用户提交内容最容易出问题。
- 用正则匹配所有跨域外链:
/]*href=["']https?:\/\/(?!(?:localhost|127\.0\.0\.1|yourdomain\.com))/i(记得把yourdomain\.com换成你的真实域名) - 对每个匹配结果,检查是否含
rel属性;如果已有rel="nofollow",不能覆盖,得合并为rel="nofollow noopener noreferrer" - 别依赖前端实时验证——编辑器里边打字边发请求既慢又容易被限流。改成“保存前触发一次批量检测”,后端用
axios.head()或requests.head()轻量探测,超时设 3 秒,只看状态码 - 注意:
onclick、onmouseover这类 inline event handler 是更隐蔽的风险,它们绕过 CSP,且常被扫描工具忽略。要额外 grep 所有含=["']on\w+的标签
富文本编辑器里的 XSS 怎么测才不漏
富文本不是“支持 HTML”就等于“安全”,它本质是把一堆过滤、解析、渲染逻辑堆在一起,每层都可能被绕过。测试不能只丢 <script></script>,得模拟攻击者拆解整个处理链。
- 基础 payload 必试:
<img src="x" onerror="alert(1)">、<svg></svg>、@#@#@#@#@#@#@#@#@#@0 - 绕过常见于大小写混淆(
OnErRoR)、HTML 实体编码(<script>)、注释分割(<scr>ipt></scr>),以及 SVG 中嵌套<foreignobject></foreignobject>等非常规路径 - 上传图片时传一个带恶意 EXIF 的 JPG,看前端是否原样输出
exif:UserComment字段到title或alt属性里——这是低配版 XSS - 真正可靠的防护不是靠“过滤黑名单”,而是白名单 + 上下文编码:只允许
p、strong、ul等语义标签;所有属性值进 HTML 属性上下文前必须走encodeURIComponent或服务端htmlspecialchars()
图片和多媒体标签的 src 漏洞怎么防
<img> 和 <video></video> 的 src 属性看似无害,但一旦接受用户可控输入,就可能变成 XSS、SSRF 或信息泄露入口。尤其警惕 data:、javascript: 和相对路径拼接。
- 禁止任何
src值以javascript:、data:、vbscript:开头;协议校验必须用new URL(src).protocol,不能只靠startsWith()(易被javascript:绕过) - 用户上传的图片,服务端必须重压缩、去元数据、存到独立 CDN 域名(如
cdn.example.com),且该域名禁止执行脚本、不托管 HTML - 前端动态拼
src时,不要拼完整 URL;改用 ID 或 token,让后端生成带签名的一次性 URL(如/api/image?token=abc123) - CSP 的
img-src指令必须显式声明可信源,例如img-src 'self' https://cdn.example.com data:;如果业务真需要data:,就把它限制在特定 context 下,而不是全站放开
最常被忽略的不是技术点,而是数据归属意识——某个 src 是谁给的?哪个函数负责清洗?谁决定它能出现在哪个 HTML 上下文?这些问题没闭环,再细的检测也只是补漏。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











