Laravel 9+ 中 AJAX 的 CSRF 令牌管理最佳实践

问题描述 投票:0回答:1

在 Laravel 9+ 的上下文中,AJAX 请求需要公开 CSRF 令牌以采取必要的安全措施。然而,不同的令牌放置方法可能会影响代码的优雅和组织。两种主要方法似乎是:

方法 1:通过 Blade 语法直接插入 CSRF 令牌

在此方法中,CSRF 令牌通过 Blade 语法直接嵌入到 JavaScript 中。 (在很多地方重复相同的代码)

$(document).ready(function() {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': "{{ csrf_token() }}"
        }
    });
});

虽然这种方法将令牌保留在 HTML 正文之外,但它需要 JavaScript 文件中的 Blade 语法,从而使关注点分离变得复杂。

方法2:从元标签中提取CSRF令牌

此方法涉及将 CSRF 令牌放入 HTML 元标记中,然后提取它以在 AJAX 设置中使用。

<meta name="csrf-token" content="{{ csrf_token() }}"> 

$(document).ready(function() {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
});

在这里,即使令牌以 HTML 形式公开(无论哪种方式都公开),它也简化了 JavaScript 文件管理、重用,并且更容易将代码/关注点分开。

考虑到上述情况,我猜方法 2 因其优雅和关注点分离而更好?或者 Laravel 中是否有其他最佳实践来通过 AJAX 请求管理 CSRF 令牌放置,从而提供更好的安全性和代码组织平衡?我期待您的见解。

PS 我看了例如https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html但其中一些超出了我的理解

javascript php ajax laravel
1个回答
0
投票

这里,即使令牌在 HTML 中公开(无论哪种方式都公开)

令牌仅公开给您想要拥有它的用户(以便他们可以将其发送回给您)。

它不会暴露给任何攻击者。 (除非他们破坏了服务器和浏览器之间的通信,这意味着他们已经拥有比成功的 CSRF 攻击更多的访问权限。)

采取直接的选择。

© www.soinside.com 2019 - 2024. All rights reserved.