一篇文章教你看懂CSRF攻击,so easy!

一篇文章教你看懂CSRF攻击,so easy!
最新回答
弦未尽

2023-02-05 18:29:45

一篇文章教你看懂CSRF攻击

1、CSRF是什么

CSRF攻击,全称为跨站请求伪造(Cross-site request forgery),是一种利用用户已登录身份,在用户毫不知情的情况下,盗用用户身份完成非法操作的攻击方式。用户很可能在日常生活里遭遇过此类攻击。例如,收到一些看似来自银行、电商平台或其他机构的可疑邮件,邮件中包含链接和网页文件,若不小心点击这些链接,计算机就会将该网站上用户的身份信息发送给服务器,此时用户身份很可能被盗用,甚至造成经济损失。

2、CSRF的攻击原理

  • 简单模型举例:用户访问恶意网站B,恶意网站B返回给用户的HTTP信息中要求用户访问网站A。由于用户和网站A之间可能已建立信任关系,这个请求会像用户真实发送的一样被执行。
  • Cookie的作用:当向网站发出请求时,受害者的浏览器会检查是否有与该网站来源相关的Cookie(包含登录状态等敏感信息),并决定是否随HTTP请求一起发送。如果是,这些Cookie将包含在发送到此网站的所有请求中,Cookie值通常包含身份验证数据,代表用户的会话,目的是为用户提供无缝体验,避免对访问的每个页面再次进行身份验证。
  • 攻击实现:如果网站批准会话Cookie并认为用户会话仍然有效,攻击者就可以利用CSRF发送请求,如同受害者发送请求一样。网站无法区分攻击者和受害者发送的请求,因为请求总是通过受害者的浏览器使用其自己的Cookie发送的。CSRF攻击正是利用了浏览器在每次请求时自动向网站发送Cookie这一用户友好化的设计。

  • 具体攻击示例

    GET接口攻击:假如博客网站A的页面具有GET接口,其中blogUserGuid参数显示关注人的ID,接口形式如下:

    若攻击者在博文内容的html文档中加入img标签(该标签用以将图片链接向网页,可存放url,因此被利用来向web应用程序发送请求),形式如下:那么只要有人打开这篇博文,就会被网站自动关注指定用户。

    POST接口攻击:假如网站仍存在GET接口,但限制了只获取POST请求的数据,攻击者只需要制作一个包含form提交代码(form可以跨域post数据)的第三方页面,曾经打开过博客网站A的用户点击进入这个网页,便会中招。另一种选择是使用XMLHttpRequest技术。相关代码如下:

    XSRF组合攻击:假如博客园有个加关注的接口,已经限制POST,但博文内容是直接贴进HTML(未过滤),这种情况下,攻击者会使用XSS攻击(恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的),直接把上面代码嵌入博文,那么只要有人打开这篇博文,还是会自动关注博文作者,这种组合攻击方式称为XSRF。

3、CSRF的防御手段

  • 验证Referer:早期的防御策略,服务器会检查HTTP请求头中的Referer字段,如果请求并非来自受信任的源,就拒绝这个请求。但这个方法不完全可靠,因为Referer头可以被篡改,或者在某些情况下被浏览器禁用。
  • 使用CSRF Token:服务器为每个会话生成一个随机的、唯一的token,并将其嵌入到表单中。当表单提交时,服务器检查这个token是否存在且有效。这种方式相对安全,但需要服务器存储和管理这些token。

  • 双重Cookie验证:2000年以来出现的新防御方式,在用户提交请求时同时验证cookie和请求参数中的token。这种方式无需服务器存储token,但需要更复杂的客户端代码来实现。
  • SameSite Cookie属性:近年来主流浏览器开始支持的新特性,通过设置Cookie的SameSite属性为Strict或Lax,可以防止浏览器在跨站请求时发送Cookie。这种方式简单有效,但需要浏览器的支持。
  • 验证码:虽然不是专门为防御CSRF设计的,但在某些情况下可作为有效的额外防御层。通过要求用户输入看到的验证码,可以确认操作确实是由用户本人发起的。

现在网络世界多以验证码与Cookie验证结合的方式作为CSRF的防御手段,而referer因为其不可靠性现在大多被禁用。相比于referer这样的旧事物,验证码防御不仅同样能达到防御CSRF攻击的目的,而且更有效、更简单。CSRF的防御手段不断迭代,向更高效、可靠的方向发展,体现了新事物必然代替旧事物的历史趋势。

4、小结

网络攻击技术与防御技术彼此依赖,以另一方的存在为前提,体现了矛盾的“同一性”。同时,它们又相互制约、互相斗争,体现了矛盾的“斗争性”。网络攻击技术与网络防御技术犹如“矛”与“盾”,网络攻击技术的发展往往加快了防御技术成熟的脚步,而防御技术的成熟也往往伴随着攻击技术的更新迭代,引起量变与质变,促进网络攻防技术的综合发展。

网络在发展过程中必然会遇到各种各样的问题,这些问题受时代和技术的限制往往十分棘手,但我们要坚信哪里有问题,哪里就有解决问题的方法。相信随着网络攻防技术的发展和人们网络安全意识的加强,网络环境会变得更加安全、开放。

内容源自成电本科生人文科普(如有侵权请联系删除)