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