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,但其中一些內容超出了我的理解範圍。
令牌只對你希望擁有它的用戶暴露(這樣他們才能將其發送回給你)。
它不會暴露給任何攻擊者。 (除非他們以某種方式破壞了伺服器和瀏覽器之間的通信,這意味著他們已經獲得比成功的CSRF攻擊更多的存取權限。)
選擇直接的選項。