X-XSRF-TOKEN和X-CSRF-TOKEN有什么区别?

2022-08-30 10:45:27

何时使用隐藏字段,何时使用标头,为什么?
当我们使用时?
当我们使用时?X-XSRF_TOKENX-CSRF TOKEN


答案 1

所有这些都用于跨站点请求伪造保护,在向后端发送请求时,您只需要使用其中一个。不同的名称来自不同的框架。

这一切都是为了发送一个到后端。然后后端会将其与该特定用户存储在数据库中的 csrf 值进行比较,如果匹配,它将允许处理请求。csrf value

企业社会责任 :

  • 用于 html 表单(不是 ajax)
  • 在渲染 html 表单时在后端生成。
  • 我们不能直接在html表单中设置请求标头,因此一种简单的方法是通过表单输入将其作为隐藏字段发送。
  • 您可以根据需要命名此隐藏输入。例如:<input name="my_csrf_input" value="a_hashed_string_the_csrf_value"

x-csrf-token:

  • 它被添加到 ajax 请求的请求标头中
  • 要使用它,我们可以在渲染html时将放在元标记中,然后在前端,我们可以从该元标记中获取值并将其发送到后端。csrf value

拉拉维尔具体:

  • 用作后端时。Laravel 会自动检查此标头,并将其与数据库中的有效标头进行比较。(laravel为此提供了一个中间件)laravelcsrf value

x-xsrf-token:

  • 它被添加到 ajax 请求的请求标头中
  • 流行的库,如 angular 和 ,会自动从 cookie 获取此标头的值,并将其放在每个请求标头中。axiosxsrf-token
  • 要使用它,我们应该创建一个在后端命名的cookie,然后使用angular或axios的前端框架将自动使用它。xsrf-token

拉拉维尔具体:

  • 因为它很受欢迎,所以laravel在每次响应中都会创建这个cookie。
  • 因此,当您使用例如或与 一起使用时,您无需执行任何操作。只需登录用户,“身份验证”中间件即可完成这项工作。axiosangularlaravel
  • 在laravel中,这是一个更大的字符串,因为cookie在laravel中加密。x-csrf-token

答案 2

当您使用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 doc中被删除,但你可以在laravel 5.0 doc中找到它,链接在这里


推荐