前端做渗透测试时怎么判断XSS漏洞是否真实存在?
我们团队最近在做安全审计,用 Burp Suite 扫描出一个反射型 XSS,但我不确定是不是误报。页面上用户输入的内容确实会回显,但我加了 encodeURIComponent 处理,按理说应该安全了,可扫描器还是报高危。
我试着手动构造 payload,比如输入 alert(1),结果被转义成纯文本显示了,没弹窗。但扫描器说在某个 URL 参数里能注入。是不是我测试方式不对?或者需要更复杂的 payload 才能验证?
下面是后端返回的那段 HTML 片段(简化过):
<div id="search-result">
您搜索的是:<span><%= keyword %></span>
</div>
这里的 keyword 是从 URL query 拿的,前端没再处理,直接渲染。这种写法到底安不安全?该怎么正确验证漏洞是否存在?
encodeURIComponent的作用范围。encodeURIComponent只对 URL 参数做 URL 编码,防止 URL 解析错误,但它对 HTML 上下文毫无作用。你前端加了它,后端模板<%= keyword %>怎么输出还是怎么输出。JSP 的
<%= %>默认确实会做 HTML 转义,但扫描器能报出来说明可能在某些配置下是 Raw 输出,或者你漏了某个参数没测。Burp Suite 报高危一般不是误报。验证方法很简单:别用
标签,现在浏览器 XSS 过滤器挺强的,很多 payload 会被直接拦截。用事件型 payload 试试:在 URL 参数里输入
">
或者用
'-alert(1)-'这类能绕过一些转义的写法。如果后端确实没做转义,这几个应该能弹窗。
最靠谱的还是直接看后端代码,确认模板引擎有没有配置自动转义,以及那个被扫描器标记的参数在后端是怎么处理的。别光信扫描器,也别光信手工测试,直接看代码最稳。