CSRF-跨站请求伪造

CSRF

1.CSRF是什么?

Cross-site request forgery简称为“CSRF”,跨站请求伪造,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行攻击,用户一旦点击了这个请求,整个攻击也就完成了,所以CSRF攻击也被称为“one click”攻击。

2.CSRF可以做什么?

攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

3.攻击原理

网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个网站,都会默认你已经登录的状态,而在这个期间,攻击者发送了构造好的CSRF脚本或包含CSRF脚本的链接,可能会执行一些用户不想做的功能。过程如下:

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A。
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A。
  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页面访问网站B。
  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A。
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
    在这里插入图片描述

4.防御方案

关于防御方案,一般有如下几种:

  1. 用户操作验证,在提交数据时需要输入验证码。
    一般用在登陆(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性)。
  2. 访问控制安全管理。
     敏感信息的修改时需要对身份进行二次认证,例如:修改账号时,需要验证旧的密码。
     敏感信息的修改使用POST,而不是GET。
     通过http投不中的referer来限制原页面。
  3. 请求来源验证,验证请求来源的referer。
  4. 表单token验证。
    现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)。
    这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。
  5. 在前后端分离的前提下(例如使用ajax提交数据)设置不了token,可以给 cookie 新增 SameSite 属性,通过这个属性可以标记哪个 cookie 只作为同站 cookie (即第一方 cookie,不能作为第三方 cookie),既然不能作为第三方 cookie ,那么别的网站发起第三方请求时,第三方网站是收不到这个被标记关键 cookie,后面的鉴权处理就好办了。这一切都不需要做 token 生命周期的管理,也不用担心 Referer 会丢失或被中途被篡改。
  6. 关于安全的会话管理(避免会话被利用)。
     不要再客户端保存敏感信息(比如身份认证信息);
     测试直接关闭,退出时的会话过期机制;
     设置会话国企机制,比如几分钟内误操作,自动登陆超时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值