CSRF攻击的详细解读
CSRF(跨站请求伪造)对于前端开发人员来说肯定是不陌生的,因为这是一种常见的前端攻击的方式。它的一个特点就是利用登陆网站的用户信息伪造请求以便能够通过服务器的用户验证,通常来说这个用户信息就是指cookie,我不知道是否会有人有这样的疑问:既然是跨站请求,cookie肯定是存在跨域的问题的,它是怎么被拿到的呢?我是在前几个星期发现这个问题的,仔细想了一下,下面我将详细说一下我的想法:
cookie
首先我们先来看一下cookie,大家都知道浏览器在第一次访问服务器的时候,服务器在返回数据的时候会将cookie存储到浏览器上,当浏览器再次访问服务器的时候会自动携带上cookie,这就是我们问题的关键点。这个cookie是浏览器自动带上的,而CSRF攻击就是利用这个特点。当他伪造请求去访问服务器的时候,浏览器会自动带上cookie,这就导致伪造的请求通过了服务器的验证,进而导致了用户的损失。
跨域
上面讲完cookie,可能会有人说你这还是没有讲到重点啊,浏览器虽然会自动带上cookie,但是那是在同源的情况下才会发生。这句话是一个关键点,同源的情况下浏览器才会自动携带cookie,我们怎么才能打破这个限制呢?熟悉跨域的同学可能会知道,解决跨域的方法有一个方法叫作jsonp。没错这就是关键点,我们利用这些不会跨域的标签来解决跨域的问题,比如script,iframe,img等标签,我们通过这些标签来进行请求,是不会受到跨域的影响的。而CSRF攻击正是利用了这些标签不受跨域影响的特性,让浏览器能够自动携带上cookie。
举例
下面我们来举一个简单的CSRF攻击的例子:
这个例子非常简单,就是利用img的src去发起一个http的get请求,由于img标签本身不会受跨域的影响,所以发起请求的时候浏览器会自动携带上对应的cookie,进而伪造请求成功,是不是很简单。最后总结一下,就是大家不要错误的以为csrf攻击是因为攻击者拿到了用户的cookie,这是不对的,CSRF攻击只是攻击者在伪造请求发送的时候,让浏览器携带上对应的cookie,这个cookie攻击者本身是看不到摸不到的,他是不可能拿到的,它只能借助浏览器的特性在请求发送的时候带上它。这点大家一定要搞清楚,否则的话在后面讲解token防御csrf攻击的时候,你会越来越凌乱。到这里,CSRF的介绍就结束了,下一篇将会讲解防御CSRF攻击的几种方式,觉的说的还可以的朋友点个赞呦!