什么是CSRF呢?我们先看一个例子。
还记得在“跨站脚本攻击”一章中,介绍XSS Payload时的那个“删除搜狐博客”的例子吗?登录Sohu博客后,只需要请求这个URL,就能够把编号为“156713012”的博客文章删除。
这个URL同时还存在CSRF漏洞。我们将尝试利用CSRF漏洞,删除编号为“156714243”的博客文章。这篇文章的标题是“test1”。
搜狐博客个人管理界面
攻击者首先在自己的域构造一个页面:
其内容为:
使用了一个<img>标签,其地址指向了删除博客文章的链接。
攻击者诱使目标用户,也就是博客主“test1test”访问这个页面:
执行CSRF攻击
该用户看到了一张无法显示的图片,再回过头看看搜狐博客:
文章被删除
发现原来存在的标题为“test1”的博客文章,已经被删除了!
原来刚才访问http://www.a.com/csrf.html时,图片标签向搜狐的服务器发送了一次GET请求:
CSRF请求
而这次请求,导致了搜狐博客上的一篇文章被删除。
回顾整个攻击过程,攻击者仅仅诱使用户访问了一个页面,就以该用户身份在第三方站点里执行了一次操作。试想:如果这张图片是展示在某个论坛、某个博客,甚至搜狐的一些用户空间中,会产生什么效果呢?只需要经过精心的设计,就能够起到更大的破坏作用。
这个删除博客文章的请求,是攻击者所伪造的,所以这种攻击就叫做“跨站点请求伪造”。