Laravel 9+中 AJAX 的CSRF令牌管理最佳实践[已关闭]

f4t66c6m  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(101)

已关闭。此问题为opinion-based。它目前不接受回答。
**希望改进此问题?**请更新问题,以便editing this post能够以事实和引文来回答。

3天前关闭。
Improve this question
在Laravel 9+的上下文中, AJAX 请求需要CSRF令牌暴露以采取必要的安全措施。但是,不同的标记放置方法可能会影响代码的优雅性和组织性。两个主要的方法似乎是:

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

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

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

字符串
尽管这种方法将标记排除在HTML主体之外,但它需要JavaScript文件中的Blade语法,从而使关注点分离变得复杂。

方法2:从Meta标记提取CSRF令牌

这种方法包括将CSRF令牌放在HTML Meta标记中,然后提取它以在 AJAX 设置中使用。
第一个月

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


在这里,即使令牌是在HTML中公开的(它是以任何方式公开的),它简化了JavaScript文件管理,重用和更容易保持代码/关注点分离。
考虑到上述情况,我猜方法2由于其优雅和关注点分离而更好?或者Laravel中是否有其他最佳实践来管理CSRF令牌放置与 AJAX 请求,以提供更好的安全性和代码组织平衡?我期待着你的见解。
PS我看了看,例如https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html但有些事情我想不通

ckx4rj1h

ckx4rj1h1#

在这里,即使标记是在HTML中公开的(它是以任何方式公开的)
令牌只会暴露给您希望拥有它的用户(以便他们可以将它发送回给您)。
它不会暴露给任何攻击者。(除非他们已经破坏了服务器和浏览器之间的通信,这意味着他们已经拥有了比成功的CSRF攻击更多的访问权限。
采取直接的选择。

相关问题