反射型:
游览器中输入:http://192.168.0.1:8888/load?pState=0&nStat=0&depart=0000</script><script>alert(1)</script>edd=&de_el=1,会出现弹框。
解决方式:
方式1.在nodeserver 中的 app.js里面添加如下:
var xss = require('xss-clean');
app.use(xss()); //这个比较好用
或者:
const xssFilter = require("x-xss-protection");
app.use(xssFilter()); //这个不太管用
上面两种都需要安装 npm install
方式2.如何用到nginx
在nginx.conf中的 server {}里面添加如下:
#防XSS攻击
#add_header X-Xss-Protection 0; --可以不加
#add_header X-Frame-Options 'SAMEORIGIN'; --可以不加
#add_header X-XSS-Protection '1; mode=block'; --可以不加
#add_header X-Content-Type-Options nosniff; --可以不加
set $block_xss 0;
if ($query_string ~ "base64_(en|de)code(.*)")
{ set $block_xss 1; }
if ($request_uri ~ "base64_(en|de)code(.*)") { set $block_xss 1; }
if ($query_string ~ "(<|%3C)*.script.*(/?>|%3E)")
{ set $block_xss 1; }
if ($request_uri ~ "(<|%3C)*.script.*(/?>|%3E)") { set $block_xss 1; }
if ($query_string ~ "(<|%3C)*.iframe.*(/?>|%3E)")
{ set $block_xss 1; }
if ($request_uri ~ "(<|%3C)*.iframe.*(/?>|%3E)") { set $block_xss 1; }
if ($query_string ~ "GLOBALS(=|[|%[0-9A-Z]
{0,2})")
{ set $block_xss 1; }
if ($query_string ~ "_REQUEST(=|[|%[0-9A-Z]{0,2}
)")
{ set $block_xss 1; }
if ($block_xss = 1)
{ return 403; }
方式3:在ejs模板文件中
如果是如下 <%- params %> 格式 var nid = JSON.parse(JSON.stringify(<%- nid %>)); var depId = JSON.parse(JSON.stringify(<%- depId %>));
改写成 <%= params %>格式
var nid = JSON.parse(JSON.stringify(<%= nid %>));
var depId = JSON.parse(JSON.stringify(<%= depId %>));