首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X-XSRF-TOKEN和X-CSRF-TOKEN有什么区别?

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

Stack Overflow用户
提问于 2017-02-23 13:59:36
回答 2查看 41.3K关注 0票数 41

什么时候使用隐藏字段,什么时候使用头部,为什么?

当我们使用X-XSRF_TOKEN的时候?

当我们使用X-CSRF TOKEN的时候?

EN

回答 2

Stack Overflow用户

发布于 2019-05-15 16:24:08

它们都是为了防止跨站请求伪造,当你向后端发送请求时,只需要使用其中一个就可以了。不同的名字来自不同的框架。

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

csrf :

  • 用于html表单(不是ajax)
  • 在后端生成的html表单。
  • 我们不能直接在html表单中设置请求头,所以一个简单的方法是通过表单输入将其作为隐藏字段发送。
  • 您可以随心所欲地命名此隐藏输入。例如<input name="my_csrf_input" value="a_hashed_string_the_csrf_value"

x-csrf-token:

  • 它被添加到ajax requests.

  • To的请求头中使用它,我们可以在呈现html时将csrf value放在元标记中,然后在前端我们可以从该元标记中获取值并将其发送到后端。

特定于Laravel:

使用laravel作为后端时的

  • 。Laravel自动检查此标头,并将其与数据库中的有效csrf value进行比较。(laravel有一个中间件来实现此目的)

x-xsrf-token:

它被添加到ajax requests.

  • Popular库的请求头中,例如angular和axios,自动从xsrf-token cookie中获取该头的值,并将其放入每个请求头中。

  • 要使用它,我们应该在后端创建一个名为xsrf-token的cookie,然后使用angular或axios的前端框架将使用它

特定于Laravel:

因为

  • 很流行,所以

  • 会在每个响应中创建这个cookie。因此,当您使用axiosangularlaravel一起使用时,您不需要做任何事情。只需登录用户,'auth‘中间件就可以完成这项工作。

  • in laravel,它比x-csrf-token更大,因为cookie在laravel中是加密的。
票数 27
EN

Stack Overflow用户

发布于 2017-02-23 14:26:04

当您使用ajax提交数据时,您将需要CSRF令牌的头部,因为ajax不会将令牌与数据一起发送。

您可以通过以下代码对ajax请求使用隐藏字段

代码语言:javascript
复制
$.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文档中找到它,链接是here

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42408177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档