何时使用隐藏字段,何时使用标头?为什么?
什么情况下使用X-XSRF_TOKEN
?
什么情况下使用X-CSRF TOKEN
?
它们都是用于跨站请求伪造保护的,在向后端发送请求时只需要使用其中一个。不同的名称来自不同的框架。
这与向后端发送 csrf 值
有关。然后后端将其与数据库中存储的特定用户的csrf值进行比较,如果匹配,则允许处理该请求。
csrf :
<input name="my_csrf_input" value="a_hashed_string_the_csrf_value"
x-csrf-token:
csrf值
放入meta标签中,然后在前端从那个meta标签获取该值并将其发送到后端。Laravel 特定:
laravel
作为后端时,Laravel会自动检查这个头部并将其与数据库中的有效csrf值
进行比较。(laravel已有一个中间件来处理这个问题)x-xsrf-token:
axios
这样的流行库会自动从xsrf-token
cookie获取此头的值并将其放入每个请求的头中。xsrf-token
的Cookie,然后使用angular或axios的前端框架将自动使用它。Laravel 特定:
axios
或angular
与laravel
时,你什么也不需要做。只需登录用户,'auth'中间件就会完成任务。x-csrf-token
相比,它是一个更大的字符串,因为在laravel中加密了cookie。\App\Http\Middleware\VerifyCsrfToken
)仅适用于 web
应用程序。如果您将 Laravel 用作 api
(REST API),Laravel 将不会运行此中间件,正如您在 App\Http\Kernel
类中所看到的。 - Wesley Gonçalves当您使用ajax提交数据时,您需要为CSRF令牌添加头部,因为ajax不会将令牌与数据一起发送。
您可以使用以下代码为ajax请求使用隐藏字段
$.ajaxSetup(
{
headers:
{
'X-CSRF-Token': $('input[name="_token"]').val()
}
});
但你需要为每个ajax请求添加隐藏字段。
X-CSRF-TOKEN和X-XSRF-TOKEN之间的区别在于前者使用明文值,后者使用加密值,因为Laravel中的cookie始终是加密的。如果您使用csrf_token()函数提供令牌值,则可能希望使用X-CSRF-TOKEN标头。
它已在Laravel 5.2文档中删除,但您可以在Laravel 5.0文档中找到它,链接在这里。