CSRF攻击防范小知识

Posted shuhe-nd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSRF攻击防范小知识相关的知识,希望对你有一定的参考价值。

一、背景

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攻击防范小知识的主要内容,如果未能解决你的问题,请参考以下文章

JSF中的CSRF、XSS和SQL注入攻击防范

CSRF攻击及防范

防范CSRF

csrf攻击与防范

一张图laravel - 防范CSRF攻击

CSRF的攻击与防范