首页 > 社区问答列表 >提升Laravel 9+中AJAX的CSRF令牌管理:最佳实践

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

In the context of 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设置中使用。


$(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,但其中一些内容超出了我的理解范围。


P粉242741921
P粉242741921

  • P粉988025835
  • P粉988025835   采纳为最佳   2023-08-09 12:22:40 1楼

    令牌只对你希望拥有它的用户暴露(这样他们才能将其发送回给你)。

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

    选择直接的选项。


    +0 添加回复