如果 CSRF Token 通过 Postman 我们可以在不提交表单的情况下获取数据吗

Posted

技术标签:

【中文标题】如果 CSRF Token 通过 Postman 我们可以在不提交表单的情况下获取数据吗【英文标题】:Can we get the data without submitting the form in case of CSRF Token via Postman 【发布时间】:2019-01-02 11:15:04 【问题描述】:

我通过邮递员访问 HTTP API 从网站获取一些数据。 它对我来说工作正常,但从最近几天开始,它给了我一个错误,即

无效的 csrf 令牌 403

因此,当我通过 chrome 中的开发人员工具进行检查时。我转到网站的网络选项卡并检查 API。

所以现在网站也在头部字段中发送 CSRF-Token。

所以我知道生成 csrf 令牌的 API。

我还从 API 获取令牌,并像在原始站点中那样发送带有标头的令牌。

但我想知道为什么每次 API 都返回 invalid csrf token

是否可以通过邮递员发送 CSRF 令牌。因为据我所知,csrf 令牌用于停止伪造请求。 该站点有一个带有 csrf 令牌隐藏字段的表单,并且在提交表单时,浏览器从该隐藏字段获取令牌并像这样工作。

我想知道一些事情:-

1) 是否可以通过邮递员在标头字段中发送 csrf 令牌。 或者我们必须通过浏览器登录该站点,然后我们才能获得 数据。

2)如何使用 Postman 从站点获取数据?

3)我是否需要使用一些无头浏览器来实现这一点?

4)当我通过帖子时,他们说我们需要设置 csrf-token 在 cookie 中,然后我们可以从 cookie 并发送请求。

非常感谢任何帮助。

谢谢

【问题讨论】:

【参考方案1】:

通常 CSRF 令牌实现与会话绑定,因此请确保您使用的是同一个会话。当您调用返回 CSRF 令牌时,将创建会话。

如果您的后端使用 cookie 进行会话实现,您可以使用 Post man 中的 cookie 拦截器来传递相同的会话 cookie。

【讨论】:

感谢您的回复我在获取 CSRF 和通过 CSRF 获取数据时使用相同的会话。但是,它仍然给我一个无效 CSRF 令牌的错误。我通过邮递员在标头字段中发送令牌,例如:- CSRF-Token: cXEBdlsa-SHnQ2aCi2cIIyQ0yATr6xtxRO44【参考方案2】:
    是否可以通过邮递员在标头字段中发送 csrf 令牌?或者我们必须通过浏览器登录网站才能获取数据。

您可以从访问网站获取 CSRF 令牌,但通过 Postman 发送。 CSRF 令牌,在很多情况下,不依赖于网站登录,只依赖于站点访问。

    如何使用 Postman 从站点获取数据?

如果网站在响应标头中返回 CSRF,那么您可能会在 Postman 中使用它。

如果您需要一些其他数据 - 这取决于网站的响应...我认为如果您的 CSRF 或/和其他表单数据正确,您将能够获得数据。

    我是否需要使用一些无头浏览器来实现这一点?

最好使用浏览器自动化,因为浏览器管理所有会话数据,包括 cookie、标头等。

    当我通过一篇帖子时,他们说我们需要将 csrf-token 设置为 cookie,然后我们可以从 cookie 中获取令牌并发送请求。

是的,CSRF 可能由服务器在 cookie 和单独的请求标头中设置或要求。因此,以下任何一项都可能需要 CSRF(取决于网站):

cookie 标头 单独的标题 表单域

我建议您使用脚本语言来使用 CSRF(或类似物)来获取数据。 example 展示了如何在 Python 中执行此操作。

注意

如果站点随每个请求/响应更改 CSRF,则该示例将不起作用。

【讨论】:

以上是关于如果 CSRF Token 通过 Postman 我们可以在不提交表单的情况下获取数据吗的主要内容,如果未能解决你的问题,请参考以下文章

如何从Postman休息客户端发送spring csrf令牌?

如何从 Postman REST 客户端发送 spring csrf 令牌?

zblog php添加Token防止CSRF攻击

Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %

使用Ajax (put delete ) django原生CBV 出现csrf token解决办法

71. Django 前后端分离csrf token获取方式