csrf漏洞学习

学习的一些笔记。

通过js向网页发送请求获取内容

//javascrip实现
var xml = new XMLHttpRequest();
xml.open('GET', "网址");
//xml.setRequestHeader("自定义报文头");
xml.send('sss');
//利用回调函数获取返回页面的值。
xml.onreadystatechange = function() {
     //判断是否获取成功。成功则弹出值。
     if (this.status == 200) {
          alert(this.responseText);
     }
}
//jquery实现
$.ajax({
	method:"GET",
	url:"网址",
	success:function(data){
		alert(data);
	}
})

域的划分

只有协议、域名、端口都一致的才算是同源。

//http://a.com:10086/ajax.php
//http://   协议
//a.com   域名
//10086   端口
//ajax.php	路径

csrf漏洞

用户事先登录成功A网站,并且没有退出A网站。此时通过B网页访问A网页时,会自动带上A网站的cookie,A网站如果没有相关拦截措施,会直接解析cookie,识别身份,对对应账户执行对应操作,之后返回数据。如果有access-的设置,虽然浏览器接收到返回数据后,判断不同源,会直接拦截信息,B无法接受返回信息。但是在此过程中有关操作已经成功执行。

防护手段

  • 第一种(二次发送)
    强制相关操作必须执行两次,第一次请求获得一个随机的token值,随后A网站返回一个token值。第二次发送操作请求时带上获得token值,执行成功返回带token的信息。如果是用B网站去发送请求,由于第一次返回带token值时,不同源,浏览器会拦截,无法得到返回token值,操作无法执行。但是要发送两次,造成较大的

  • 第二种(B站)
    cookie中含有一个csrf-token值,对A网站进行操作时,强制要求发送请求的发送值中带上csrf-token,不能仅仅只是再cookie中。由于无法得到cookie值,能有效防护。

  • 第三种(喜马拉雅)
    不使用cookie,自制一个令牌头。

javascrip类

function A(){
	this.text="hello,world";
}
//为类添加属性
A.prototype.add=function(a,b){
	return a+b;
}
//实例化类
var a=new A();
上一篇:跨站请求伪造--CSRF


下一篇:你在项目中做过哪些安全防范措施?