跨站请求伪造(csrf)是一种劫持受信任用户向服务器发送非预期请求的攻击方式。例如,这些非预期请求可能在url后加入一些恶意的参数,从而达到攻击者的目的。
理解
其他人通过csrf攻击盗用你的网站用户身份。
你这个网站用户所拥有的权限那他就都可以使用,比如用你的身份发消息、购买物品、转账等等。
原理
A:用户的信任网站 B:危险网站
.成功登录A网站 这里浏览器会产生cookie
.打开B网站
.B网站事先摸清了A网站的请求套路,比如转账的请求是:/zhuangzhang
.此时打开B网站会有请求到A网站,并且携带了A网站的cookie
.A的服务器会认为这是一个正常的处理,这样B就达到了模拟用户操作的目的
常见攻击类型
-
GET类型的csrf
某网站可以上传图片,然后小明上传了图片如下
<img src=http://jirengu.com/csrf?xx=11 />
当用户访问到有此图片的页面时就完成了一次csrf攻击
-
POST类型的csrf
用户在登录他所信任的的网站之后又访问了危险网站
危险网站内有这样一段代码
<form action=http://jirengu.com/csrf.php method=POST> <input type="text" name="xx" value="11" /> </form> <script> document.forms[0].submit(); </script>
访问此页面后 表单就会提交 此时就完成了一次post的csrf攻击
防御
-
验证 HTTP Referer 字段
http协议中,http头有一个字段叫 referer ,他记录了该请求的来源。
请求验证的时候,判断请求来源是否合法,不合法就拒绝并送他一句MMP..
但是referer是可以篡改的,就断有些浏览器无法篡改对于某些注重隐私的组织来说这种方法也不实用。
-
添加token
csrf的原理就是伪造用户的请求,那可以制造一种不能伪造或者很难伪造的请求。
我们可以再http请求中加一个随机产生的token,在服务器验证token
如果token不合法那就送他一句MMP吧
但是这种方法也有很大缺点,比如每个请求都需要携带token增加了开发成本
而且,通过referer也可以得到token值
完
csrf的危害很大,但™️ 又难于防范,并没有很完美的解决方案,只有重视才能降低伤害。
网友评论