最易触发xss的html属性包括onerror、onclick等事件处理器,href中javascript:协议,src/srcdoc等可执行脚本属性;innerhtml/outerhtml因解析执行html而比textcontent更危险。

看哪些HTML属性会直接执行JS
浏览器对某些属性的值会主动解析并执行,不是所有属性都危险,但以下几类只要值可控,基本等于开了后门:onerror、onclick、onload、onfocus等所有以on开头的事件处理器;href里带javascript:或vbscript:;src、srcdoc、data属性中拼接了用户输入;style里用了expression()(IE)或url(javascript:)(旧CSS解析器)。这些地方不写<script></script>也能触发XSS,单纯过滤<script></script>标签毫无意义。
检查用户输入是否被拼进HTML结构里
重点盯三类位置:URL参数反射到页面(比如?q=xxx导致<title>xxx</title>)、表单回显(搜索词、用户名显示)、富文本或评论内容。常见错误是用innerHTML直接赋值:element.innerHTML = userInput——这等于把字符串当HTML解析,而textContent只渲染纯文本,安全得多。其他高危操作包括document.write()、insertAdjacentHTML()、Vue的v-html、React的dangerouslySetInnerHTML。框架自动转义只覆盖默认渲染路径,手动绕过就等于放弃防护。
别漏掉DOM型XSS这种“看不见”的漏洞
这类漏洞不经过服务器返回,全靠前端JS动态拼接,审查时极易漏掉。典型场景有:location.hash或location.search直接赋值给innerHTML、document.title、iframe.src;document.referrer被用于构造链接或显示来源;从localStorage或sessionStorage读取的数据未经清洗就用于渲染(比如保存了上次搜索关键词)。验证方法很简单:不用等后端响应,直接用开发者工具改DOM或构造URL参数测试,比如在URL里加" onfocus="alert(1),观察是否生成类似<input value="" onfocus="alert(1)">的结构。
注意HTML实体和大小写绕过
很多简单过滤只针对明文、<code>>、双引号,但攻击者可用"替代英文双引号,用绕过;有些系统在存储时解码HTML实体,输出时又没再编码,导致二次解码触发XSS;还有大小写混淆(<code>ScRiPt)、空格/制表符分隔(<img>)、注释分割(<!-- --><script>alert(1)</script>)等手法。这些绕过机制依赖浏览器解析差异,人工审计时必须尝试多种变体,不能只测标准payload。
真正难发现的,是那些看似只是“填个value”或“设个src”的地方——比如<input value="<img src=x onerror=alert(1)>">,攻击者能闭合引号完成注入。这类细节在代码里藏得深,靠工具扫不全,必须逐个上下文判断。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











