Web黑客技术揭秘-读书笔记
第四章 前端黑客之CSRF
一、概述
CSRF,全称是 Cross Site Request Forgery,即跨站请求伪造。
对于CSRF来说,有两个关键点:跨站点的请求与请求时伪造的。
1.跨站点的请求
从字面上看,跨站点请求的来源时是其他站点,比如,目标网站的删除文章功能接受到来自恶意网站客户端(Javascript、Flash、HTML等)发出的删除文章请求,这个请求就是跨站点的请求,目标网站应该区分请求来源。
字面上的定义总是狭义的,这样恶意的请求也是有可能来自本站。
2.请求是伪造的
伪造的定义很模糊,一般情况下,我们可以认为:如果请求的发出不是用户的意愿,那么这个请求就是伪造的。
3.一个场景
参考:P85-P88
总的来说,这个“大多数场景”:存在一个目标网站A:www.a.com,恶意网站B:www.b.com
两个域不一样,目标网站A上有一个删除文章的功能,通常是用户单击“删除链接”时才会删除指定文章,这个链接是www.a.com/blog/del?id=1,id号代表不同的文章
1.GET请求方式:
如果目标网站A上存在一个XSS漏洞,执行的JS脚本无同源策略限制,就可以按下面的方式来删除文章。
- 使用AJAX发出GET请求,请求值是id=1,请求目标地址是www.a.com/blog/del。
- 动态创建一个标签对象(img、iframe、script)等,将他们的src指向这个链接
- 然后欺骗用户访问存在XSS脚本的漏洞页面(在目标网站A上),则攻击发生
攻击过程有三个关键点:跨域发出了一个GET/POST请求、可以无JavaScript参与、请求时身份认证后的。
如果不存在XSS漏洞或者不使用这种方式,要如何做?:
- 在恶意网站B上编写一个CSRF页面www.b.com/csrf.htm,想想有什么其他办法可以发出一个GET请求到目标网站
- 利用AJAX跨域时带上目标域的会话
- 更简单的:用代码<img src=http://www.a.com/blog/del?id=1/>。
- 然后欺骗已经登陆目标网站A的用户访问www.b.com/csrf.htm页面,则发生攻击。
总得来说:
- 跨域发出了一个GET请求、
- 可以无Javascript参与
- 请求是身份认证后的:浏览器允许网站(恶意网站B)跨域请求目标网站A的资源时带上目标网站A的用户本地Cookie。
2.POST请求方式
通过JavaScript自动生成一份表单
二、CSRF类型
1.HTML CSRF攻击
HTML中能够设置src/href等链接地址的标签都可以发起一个GET请求
2.JSON HiJacking攻击
网站发出的AJAX请求,响应回来的数据是JSON格式,它有以下两种格式。
1)字典格式
2)列表格式
饭否的JSON HiJacking案例
这一章节看的十分不明白,
3.Flash CSRF攻击
总结:CSRF的基本概念和分类
内容来源自钟晨鸣,徐少培《前端黑客技术揭秘》