2019-06-19

防御CSRF攻击的几种方式

1.尽量采用post,少用get

该方法的局限性比较大,只能在一定程度上防御CSRF攻击,现在已经基本不采用此方式。

2.设置refer

这种方式是利用设置refer,来限制访问服务器的站点,只允许与refer设置的站点相同的网站才能访问服务器。这种方式也有比较大的局限性,因为在某些低版本的浏览器中,refer是可以被篡改的,所以说也不安全。

3.验证码

这个方式是最彻底最简单的方式了,每次访问的时候都要输入验证码,简单粗暴,完全能够防御CSRF带来的攻击。但是缺点就是影响用户体验,每次都要输入验证码太恶心了,所以说我们只在比较重要的请求的地方设置验证码。

4.token验证

这是现在用的最多的一种方式了,用户登录成功之后,服务器将用户信息自动生成一个token返回给客户端,同时也将这个token信息保存在服务器的某个地方(现在一般都是保存在redis中),客户端需要将这个token保存起来,一般是放在cookie或者sessionStorage中,以后只要再次请求的时候,都会从客户端保存token的地方取出token,并且带上token去访问服务器,服务器端token验证不通过的话就拒绝访问,这是目前使用最多的一种防御CSRF攻击的方式。

5.自定义header

自定义header是第四种方式的一种扩展,它是把客户端取出来的token放到请求头中,然后服务器通过验证请求头的token信息。下面是一个例子:

通过上面两个图片你可以明显看到当发送请求的时候,会先从cookie中取出token放入请求头的Authorization中,这也就是我们常说的权限验证,来解释一下为什么这样做可以防御csrf攻击。因为伪造请求都是通过一些没有跨域限制的标签来伪造的,他们是无法给自己添加请求头的,所以说虽然他们可以正常的让浏览器携带cookie,但是无法添加我们手动设置的请求头,自然也就不会验证通过。这篇文章就到这里了,下一篇准备讲一下http请求阻塞的问题

你可能感兴趣的:(2019-06-19)