已关闭。此问题为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但有些事情我想不通
1条答案
按热度按时间ckx4rj1h1#
在这里,即使标记是在HTML中公开的(它是以任何方式公开的)
令牌只会暴露给您希望拥有它的用户(以便他们可以将它发送回给您)。
它不会暴露给任何攻击者。(除非他们已经破坏了服务器和浏览器之间的通信,这意味着他们已经拥有了比成功的CSRF攻击更多的访问权限。
采取直接的选择。