【问题标题】:Does Laravel CSRF protection provide 100% safety?Laravel CSRF 保护是否提供 100% 的安全性?
【发布时间】:2021-08-09 10:20:37
【问题描述】:

Laravel 文档说:

Laravel 自动为应用程序管理的每个活动用户会话生成一个 CSRF“令牌”。此令牌用于验证经过身份验证的用户是实际向应用程序发出请求的人。由于此令牌存储在用户的会话中,并且每次会话重新生成时都会更改,因此恶意应用程序无法访问它。

Laravel 配置 session.php 文件保证 session cookie 的生命周期默认为 120 分钟:

'lifetime' => env('SESSION_LIFETIME', 120)

让我们想象一下,例如,我在 Laravel 应用程序中进行身份验证并接收会话 cookie。如果在身份验证后的 120 分钟内我将访问恶意网站并受到 CSRF 攻击,会发生什么情况?当然,考虑到 cors.php 配置设置为允许接受任何 (*) 来源 ('allowed_origins' => ['*'])

以我目前的理解,在认证浏览器后的这 120 分钟内有会话 cookie,所以如果我去恶意网站并受到 CSRF 攻击,攻击会成功。

如果我目前的理解有误,请纠正我?

【问题讨论】:

  • 我认为任何安全功能都不能保证 100% 的保护。总是有洞。这就是为什么您应该考虑使用多种验证方法来消除损害应用程序的不需要的请求。
  • 100% 安全防范什么?即使您在应用程序的某些地方使用 CSRF 令牌,它也可能在其他地方容易受到攻击

标签: laravel csrf


【解决方案1】:

因此,我的理解存在的问题是,我不知道您无法访问与您尝试访问的网站不同的来源的 cookie。所以在 csrf 的情况下,恶意网站的来源与 Laravel 服务器提供的 CSRF-TOKEN cookie 的来源不同,因此攻击失败。所以是的,laravel csrf 保护工作。

对我自己的初学者完整解释CSRF保护:

  1. 什么是csrf攻击? 想象一下,您在域 A 的网站上进行了身份验证,并从为站点 A 提供服务的服务器接收到会话 cookie。另一个具有域 B 的恶意网站包含一个脚本,当您进入站点 B 时,该脚本会向服务于域 A 的服务器发出请求。只要您的浏览器包含网站 A 的会话 cookie,尝试从网站 B 进行攻击的脚本就会成功。
  2. 那么 csrf 令牌如何帮助覆盖这个漏洞呢? 现在 laravel 服务器向您发送带有 XSRF-TOKEN cookie 的响应,当您尝试使用来自域 A 的脚本发送 axios 请求时,axios 会自动将 XSRF-TOKEN 的值放置到 X-XSRF-TOKEN 标头以防同源请求(当网站A 具有与服务器同源的域)。对于具有非同源请求的恶意网站,脚本无法访问 XSRF-TOKEN cookie,因为无法访问其他来源的 cookie。因此 axios 不能将 XSRF-TOKEN 的值放置到请求标头或请求参数中。服务器检查 X-XSRF-TOKEN 或 csrf 令牌参数的传入请求,服务器无法找到它,因此服务器不验证请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2010-09-13
    • 1970-01-01
    • 2018-05-27
    • 2015-12-25
    • 2016-04-08
    • 2021-12-24
    • 2018-03-09
    相关资源
    最近更新 更多