攻击方式
1.反射型
发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程想一次反射,故叫反射型XSS。
// 适用范围:后端接口会根据url后面拼接传参的参数原样返回的
// 浏览器植入XSS脚本
localhost:3000/?xss=<img%20src="null"%20onerror="alert(1)"/>
// 植入文字
localhost:3000/?xss=<p%20onclick="alert(%27点我%27)">点我</p>
// 嵌套网站
localhost:3000/?xss=<iframe%20src="//baidu.com/t.html"></iframe>
2.存储型
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。
防御措施
1.过滤
移除用户上传的DOM属性,如onerror等,移除用户,上传的Style节点、Script节点、Iframe节点等
2.校正
避免直接对HTML Entity解码
使用DOM parse转换,校正不配对的DOM标签