码迷,mamicode.com
首页 > 其他好文 > 详细

CSRF攻击防范小知识

时间:2020-07-26 19:21:30      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:submit   添加   上下文   put   发送   email   hid   color   无法   

一、背景

CSRF是一种常见的跨站伪造请求攻击,它通过伪造真实用户的请求,来欺骗服务器以实现非法操作的目的。相比于xss攻击,它无法读取到用户的cookie等隐私信息,但可以在规则之内做一些用户未感知的危险操作。

 

二、原理

它利用浏览器无法区分请求是否是用户真实操作的特点,来自动向被攻击服务发送请求。

举个例子:

1、假设用户登录了qq邮箱- qq.email, 这时候浏览器保存了用户的登录cookie等信息

2、这时候用户收到了一封钓鱼邮件,并且打开了邮件中的链接。

3、浏览器新开的页面实际是hacker的攻击页面,它里面包含以下内容:

<img src="qq.email?delete=1234" size=1/>

那么在用户打开这个页面时候,便会想qq邮箱发送一个请求,删除某些邮件,或者是其他非法操作。

这个时候,由于浏览器还保存了邮箱的cookie,在发送请求的时候,会自动带上用户的身份信息,因此,服务端会认为这是一个正常的用户请求,也就如实执行了删除等操作。

当然,对于post类型的接口,hacker在页面中可以加入如下代码:

<form method="POST" action="https://qq.email.com/mail/h/ewt1jmuj4ddv/?v=prf" enctype="multipart/form-data"> 
    <input type="hidden" name="cf2_emc" value="true"/> 
    <input type="hidden" name="cf2_email" value="hacker@hakermail.com"/> 
    .....
    <input type="hidden" name="irf" value="on"/> 
    <input type="hidden" name="nvp_bu_cftb" value="Create Filter"/> 
</form> 
<script> 
    document.forms[0].submit();
</script>

同样也是可以向post接口伪造请求的。

 

三、防范

防范的本质是区分哪些是用户真实的请求,并忽略那些伪造的请求。

1、增加token验证机制

在用户每次访问服务时,服务端根据一定的规则,比如时间+用户特则等进行编码,生成一个随机的token给到前端,同时,服务端自己也将在session中存储这个token信息。

前端将这个token保存在自己的上下文中,在下次发送请求的时候,便将这个token作为参数的一部分发送到服务端,然后服务端根据规则验证这个token是否有效,并对有效的请求进行处理。

 

2、双cookie验证机制

在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串(例如csrfcookie=v8g9e4ksfhw)。
在前端向后端发起请求时,取出Cookie,并添加到URL的参数中(接上例POST https://www.a.com/comment?csrfcookie=v8g9e4ksfhw)。
后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝。

CSRF攻击防范小知识

标签:submit   添加   上下文   put   发送   email   hid   color   无法   

原文地址:https://www.cnblogs.com/shuhe-nd/p/13380081.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!