Kis*_*ade 13 php security csrf laravel-5.2
当使用隐藏字段和使用标题时为什么?
X-XSRF_TOKEN我们什么时候用?
X-CSRF TOKEN我们什么时候用?
Ahm*_*aki 26
所有这些都是用于跨站点请求伪造保护的,您在向后端发送请求时只需要使用其中一个。不同的名称来自不同的框架。
这一切都是关于发送csrf value到后端。然后后端将它与存储在数据库中的特定用户的 csrf 值进行比较,如果匹配,它将允许处理请求。
csrf :
<input name="my_csrf_input" value="a_hashed_string_the_csrf_value"x-csrf-令牌:
csrf value在渲染 html 时放入一个元标记,然后在前端我们可以从该元标记中获取值并将其发送到后端。Laravel 具体:
laravel作为后端。Laravel 自动检查此标头并将其与csrf value数据库中的有效标头进行比较。(laravel 有一个中间件)x-xsrf-令牌:
axios,会自动从xsrf-tokencookie 中获取此标头的值并将其放入每个请求标头中。xsrf-token在后端创建一个名为 cookie 的 cookie ,然后我们使用 angular 或 axios 的前端框架将自动使用它。Laravel 具体:
axios或angularwith 时laravel,你不需要做任何事情。只需登录用户,'auth' 中间件就可以完成这项工作。x-csrf-token因为 cookie 在 laravel 中是加密的。小智 8
当您使用ajax提交数据时,您将需要CSRF令牌的标头,因为ajax不会将令牌与数据一起发送.
您可以使用以下代码将隐藏字段用于ajax请求
$.ajaxSetup(
{
headers:
{
'X-CSRF-Token': $('input[name="_token"]').val()
}
});
Run Code Online (Sandbox Code Playgroud)
但是你必须为每个ajax请求添加隐藏字段.
X-CSRF-TOKEN和X-XSRF-TOKEN之间的区别在于第一个使用纯文本值而后者使用加密值,因为Laravel中的cookie始终是加密的.如果使用csrf_token()函数提供标记值,则可能需要使用X-CSRF-TOKEN标头.
它在laravel 5.2 doc中删除但你可以在laravel 5.0 doc中找到它,链接就在这里