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

vvppvyoh  于 2023-03-16  发布在  PHP
关注(0)|答案(3)|浏览(156)

什么时候使用隐藏字段,什么时候使用标题,为什么?
X-XSRF_TOKEN当我们使用?
当我们使用?

goqiplq2

goqiplq21#

它们都是用于跨站点请求伪造保护的,你只需要使用其中的一个当你发送一个请求到后台时。不同的名字来自不同的框架。
这就是发送一个csrf value到后端,然后后端将它与存储在数据库中的特定用户的csrf值进行比较,如果匹配,它将允许处理请求。

加拿大皇家空军:

  • 在HTML表单中使用(不 AJAX )
  • 呈现html表单时在后端生成。
  • 我们不能直接在html表单中设置请求头,所以一个简单的方法是通过表单输入将其作为隐藏字段发送。
  • 你可以命名这个隐藏的输入任何你想要的.例如. <input name="my_csrf_input" value="a_hashed_string_the_csrf_value"
    x-csrf-令牌:
  • 它被添加到 AJAX 请求的请求头中。
  • 要使用它,我们可以在渲染html时将csrf value放在一个 meta标记中,然后在前端我们可以从该元标记中获取值并将其发送到后端。

Laravel特定:

  • 当使用laravel作为后端时,Laravel会自动检查此标头,并将其与数据库中的有效csrf value进行比较。(Laravel有一个用于此操作的中间件)
    x-xsrf标记:
  • 它被添加到 AJAX 请求的请求头中。
  • 像angular和axios这样的流行库会自动从xsrf-token cookie中获取这个头的值,并将其放在每个请求头中。
  • 要使用它,我们应该在后端创建一个名为xsrf-token的cookie,然后我们使用angular或axios的前端框架将自动使用它。

Laravel特定:

  • 因为它很受欢迎,laravel在每个回复中都创建了这个cookie。
  • 所以当你使用例如axiosangularlaravel,你不需要做任何事.只是登录用户和'auth'中间件将做这工作.
  • 在laravel中,与x-csrf-token相比,它是一个更大的字符串,因为cookie是在laravel中加密的。
0ve6wy6x

0ve6wy6x2#

当你使用 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文档中找到它,链接在这里

6ovsh4lw

6ovsh4lw3#

除了已经给出的答案之外,值得注意的是CSRF和XSRF这两个术语是可以互换的。
一般认为,跨站请求伪造最初被称为XSRF,其中“X”代表Cross(1),或者它遵循跨站脚本(XSS)中使用的模式,以避免与CSS(2)混淆。
随着时间的推移,一些框架使用“XSRF”来表示通过XHR提供的保护,而“CSRF”则用于表示通过HTML表单提供的保护(参见本页的其他答案)。
然而,“CSRF”现在已成为更常用的术语。

相关问题