XSS进阶XSS的过滤和绕过过滤分为WAF层在外部在主机或网络硬件上对HTTP请求进行过滤拦截和代码层在编写web应用的过程中直接实现或者引用第三方库对用户输入进行过滤1.富文本过滤用户编辑博客或其他大多编辑器允许用户直接编辑HTML这就引入了XSS。常见的过滤方式是对用户输入的标签进行限制若采用黑名单的方式可以寻找黑名单中遗漏的标签。在以上xss入门中的标签链接中查看。如果过滤器本身存在缺陷比如将黑名单内容替换成空可采用双写绕过如这里的onerror的内容就是对alert1进行HTML进行编码之后的结果最后仍然可以成功触发弹窗3。注入点在script标签中如果注入点被引号包围可以像绕过sql注入一样先闭合引号在用分号结束语句之后插入代码如果引号被过滤且下一行存在两个注入点的情况下var urlhttp://xxxx/?name?$name??$address?可以使用反斜杠使得第一个引号被转义从第二个引号开始插入我们的代码var urlhttp://xxxx/?name\;alert(1);\\红色部分是name的值蓝色部分是address的值如果存在单词黑名单比如不允许出现eval等字符可以使用unicode编码绕过4.CSP过滤及其绕过CSP用于检测并缓解某些特定类型的注入包括XSS和数据注入使用前需要配置HTTP头部配置Content-Security-Policy字段具体策略文档在以下网站找到https://developer.mozilla.org/zh-CN/does/Web/HTTP/Headers/Content-Security-Policy指令获取指令文档指令导航指令格式Content-Security-Policychild-src;source:‘self’ ‘unsafe-eval’ ‘none’ ‘nonce-’…绕过script-src ‘self’,self意味着只允许加载同域名目录下的脚本所以我们可以寻找文件上传或者jsonp接口如果是图片上传接口即访问资源时的Content-Type为image/png浏览器会拒绝将其作为脚本jsonp传参方式callbackxxxxxxxxx{“result”“success”}这时如果传入callbackalert(1);//会产生这样的返回alert1//{“result”“success”}