CSRF
1.什么是CSRF?
Cross-Site Request Forgery
跨站请求伪造
CSRF概念:
CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
CSRF攻击攻击原理及过程如下:
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
-
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
-
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
2.CSRF发生的原理?
CSRF实现流程
用户访问网站时,向服务器发出请求,服务器给予应答返回cookie,用户在此时点击攻击的链接时,对应的服务器发送回包含恶意请求的网页,从而利用本客户端的cookie来实现入侵。
CSRF典型案例
Gmail CSRF漏洞
Weibo CSRF漏洞
CSRF漏洞危害
修改账户信息
利用管理员账号,上传木马文件
传播蠕虫病毒(点击、扩散、点击、······)
和其他攻击手段配合,实现攻击,比如XSS
CSRF与XSS的区别
XSS 可以执行脚本窃取cookie,将脚本代码注入到服务器当中
CSRF是利用用户已经在本地保存的cookie,直接利用第三方网站使用本地的cookie发送请求
3.怎么发现CSRF漏洞?
CSRF常见形式
(1)通过图片的img src属性,自动加载发起GET请求
img src="http://...... " width="0" height=" ">
(2)构建一个超链接,用户点击以后,发起GET请求
<a href="http://........">小姐姐在线聊天!!!<a/>
(3)构建一个自动提交的表单(隐藏),用户访问,发起POST请求
< form action="http://...." method=POST>
<input type="" name="" value="">
<input type="" name="" value="">
<input type="" name="" value="">
</form>
4.CSRF漏洞的防止?
CSRF的防御
1.怎么确定一个接口地址有没有CSRF漏洞呢?
2.具体怎么操作?
3.有没有工具可以使用?
如果自己没有输入账号密码、没有产生cookie的情况下,发起对某个接口的请求,目标网站正常响应了,那么可以认为这个接口存在CSRF漏洞。
防御思路
a、我们能不能区分一个请求是来自于自己的前端页面,还是第三方的网站?
b、怎么让自己的前端页面和伪造的请求变得不一样?
HTTP Request Header
Referer:引用页;来源页面
客户端可以凭借此referer向服务器证明是本人使用,而第三方网站向服务器请求时却无法产生,达到防护目的。
攻击者可以在请求中加入客户端已存在的referer来绕过服务器的检测,从而达到入侵目的;
Cookie Hashing
1.客户端对cookie计算哈希,一起发送给服务端;
2.服务端接收到cookie,计算哈希值,与收到的哈希值进行比较。
3.如果匹配,说明是用户端自己访问的请求
CSRF Token
1.用户使用用户名密码登录,服务端下发一个随机的token字段,并且服务端把这个字段保存在服务端session当中。
2.客户端把这个token保存起来,放到隐藏字段;
3.用户在登陆状态下,在之后访问的时候,都要携带这个token字段。
4.服务端从session中拿出token值进行对比,,如果一致,说明请求合法。
5.用户退出,session销毁,token失效
个人用户建议
1.不要访问不安全的网站;
2.不要随意点开别人发给你的链接;
今日作业
CSRF的预防措施有哪些?