CSRF注入

CSRF攻击

Cross-site request forget 跨站请求伪造,指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起跨站请求。

攻击步骤

  1. 首先用户C浏览并登陆了受信任站点A
  2. 登录信息验证通过以后,站点A会在返回给浏览器的信息中带上已经登录的cookie,cookie信息会在浏览器端保存一定时间(根据服务器设置而定)
  3. 用户在没有登出(清除站点A的cookie)站点A的情况下,访问恶意站点B
  4. 这是恶意站点B的某个页面向站点A发起请求,而这个请求会带上浏览器端所保存的站点A的cookie
  5. 站点A根据请求所带的cookie,判断此请求为用户C发送的返回数据

特点

  1. 攻击一般发起在第三方网站,而不是被攻击网站
  2. 攻击是利用受害者在被攻击网站的登录凭证,冒充受害者的操作,预测出别攻击网站的接口参数进行请求伪造

防御方法

  1. SameSite属性

cookie的SameSite属性用来限制第三方Cookie,该属性设置Cookie不随着跨域请求发送,可以设置三个值:Strict\Lax\None

  • strict: 完全禁止第三方Cookie,跨站点时,任何情况下都不会发送Cookie,也就是说只有当前网页的URl与请求目标一致才会携带Cookie

    Set-Cookie: CookieName=CookieValue;SameSite=Strict

  • Lax: 大多数情况也不发送第三方Cookie,但是导航到目标网址的Get请求除外

    Set-Cookie: CookieName=CookieValue;SameSite=Strict

    导航到目标网址的Get请求,只包括三种情况:链接,预加载请求,GET表单

  • 同源策略 在http协议中,异步请求会携带两个Header,用于标记来源域名

  • Origin Header
  • Referer Header

这两个header在浏览器发起请求时通常会自动带上,不能由前端定义,服务器可以通过解析这两个人Header中的域名,确定来源域名。通过校验来源域名,可以知道请求是否从本站发出,就可以拒绝非本站发出的请求来避免CSRF攻击

  1. 服务端验证Token 服务器下发一个随机Token,每次发起请求是会携带token,服务器判断token是否有效

  2. 验证码 CSRF攻击往往是用户不知情的情况下伪造请求,而验证码会强制用户必须与应用进行交互才能完成最终请求,而因为CSRF攻击无法获取到验证码,就可以有效的防范攻击,但是出于用户体验考虑,不需要给网站所有的操作都添加验证码,所有验证码只能作为辅助手段。

results matching ""

    No results matching ""