今天,来分享一下CRSF攻击基本知识
CRSF:cross site request forgery 跨站请求伪造
下面是CRSF攻击的示意图:
上图可以简单总结为三步:
- 用户登陆A站,并保留登陆信息
- 用户访问B站, B站携带A站登陆信息恶意请求A站
- A站无法识别请求方,当作合法请求处理,从而遭受攻击
简单示例:
某个网站存在以下恶意信息
<img src="http://www.xxx.com/blogadmin.php?type=delete&id=3">
乍一看,可能大家感觉这不就是一个简单的html图片标签吗?
但是仔细看可以发现,这根本就不是一个对图片的请求连接,当你登陆到此网站后,网站会主动发起:
http://www.xxx.com/blogadmin.php?type=delete&id=100
的请求,如果此时www.xxx.com做的比较简陋,就是通过get请求来进行blog的管理
假设后台如果是这样写的话:
$type = $_GET['type'];
$id = $_GET['id'];
if($type == 'delete'){
if($id > 0 ){
delete_blog_by_id($id);
...
}
}
那么可能你昨天刚熬夜写的新博文就被无情的干掉了,然而你却是一脸蒙逼,毫不知情。
当然啦,很少有网站这么做,这样做的网站,也很少有网站专门去攻击,
那么,我们应该怎样去预防CRSF攻击呢?
- 将cookie设置为HttpOnly
具体的设置方法因网站的语言不同,而有所差异,具体方法请自行谷歌 - 检测Referer
HTTP头部的Referer用来记录HTTP请求的来源地址,一般情况下,来自本站的请求都是合法且安全的,而且对于比较敏感操作,必须设置来源本站,于是通过检测Referer信息,就可以避免此类攻击 - 设置token
在请求中放入攻击者无法伪造的东西,从而避免此类攻击,如在http请求中加入随机的token,然后在数据提交时,先进行token验证,如果正确,则继续后续操作,否则阻止继续进行。