Web安全-XSS
DDos(分布式防御攻击)防御攻击,DOS攻击占用合理的客户端请求,占用过多的服务器资源,使合法用户无法得到服务器的响应。DDos在传统的DOS攻击基础上产生的攻击方式,还有Server Limit DOS,当httpRequest过长时,Web Server就会产生400或者4XX的错误,如果这些超长的数据保存在cookie中,用户每次请求时,就会导致http请求超长,使得一些用户无法访问此域名
csrf跨站请求伪造攻击 (可参考http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html)
1. XSS的攻击方式:
(1)反射型:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码,这个过程像一次反射,故叫反射型XSS
利用Expess模拟步骤:
express -e ./
npm install 安装依赖模块
修改相关的代码:
在index.js中:
router.get('/', function(req, res, next) { res.set('X-XSS-Protection', 0); /*加上这个就阻止了浏览器阻止XSS的默认设置*/ res.render('index', { title: 'Express', xss : req.query.xss}); });
在模板index.ejs中:
<%- xss %> <!--"-"表示不需要转义-->
npm start 开启服务
测试一:
测试二:嵌入了一个页面(广告植入等)
(2)存储型:存储型XSS和反射型XSS的差别在于,提交的代码会储存在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码
2. XSS的防御措施:编码、过滤、校正
编码:对用户输入的数据进行HTML Entity编码
过滤: 1. 移除用户上传的DOM属性,如onerror等
2. 移除用户上传的style节点、script节点、iframe节点等
校正: 1. 避免直接对HTML Entity解码
2. 使用DOM Parse转换,校正不配对的标签
构建Node服务和建立一个评论过程:
触发XSS:
//编码
s = s.replace(/&/g, ">");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/\s/g, " ");
s = s.replace(/\'/, "'");
s = s.replace(/\"/, """);
s = s.replace(/\n/g, "<br>");
parse函数:
var parse = function(str) {
var result = '';
try{
HTMLParser(he.unescape(str, {strict: true}), {
start : function(tag, attrs, unary) {
result += '<' + tag;
for(var i = 0; i < attrs.length; i++) {
result += ' ' + attrs[i].name + '="' + attrs[i].escaped + '"';
}
result += (unary ? "/" : "") + ">";
},
end : function(tag) {
result += "</" + tag + ">";
},
chars : function(text) {
result += text;
},
comment : function(text) {
result += "<!--" +text+ "-->";
}
});
return result;
}catch(e) {
console.log(e);
}
}
插入的img标签的src为null,触发onerror事件,弹出1
由用户触发的XSS事件:
防御:
上面的parse函数是未进行过滤的部分,所以没有起到防御作用,修改之后产生的结果如下:拦截成功