【问题标题】:How to fetch and reuse the CSRF token using Postman Rest Client如何使用 Postman Rest Client 获取和重用 CSRF 令牌
【发布时间】:2017-01-15 23:54:05
【问题描述】:

我正在使用 Postman Rest 客户端来访问其他服务。当我尝试从 Postman 客户端执行 rest 服务时出现以下错误。

HTTP Status 403 - Cross-site request forgery verification failed. Request aborted.

看来,其余服务通过 CSRF 令牌的实现得到保护。有人知道如何获取 CSRF 令牌并将其重用于未来的请求吗?

【问题讨论】:

标签: rest web-services security postman csrf


【解决方案1】:

1) 在 Chrome/Firefox 中,通过右键单击任意位置打开控制台并选择“检查”(对于 Chrome)或“检查元素”(对于 Firefox)。

2) 选择“网络”标签。 3) 4)

在看到请求时先执行获取请求或登录,以获取从服务器发送的 CSRF-TOKEN。

5) 在下一个 post 请求中,使用上一个请求中的 CSRF-TOKEN。

【讨论】:

  • 嗨,我正在通过邮递员发送与您上面描述的相同的请求,但仍然收到相同的错误 403 invalids csrf。如果您能帮助我,将不胜感激。谢谢
  • 因为 X-CSRF-TOKEN 的值发生了变化......你必须在它更新时获取它,比如新登录后
【解决方案2】:

有几种方法可以防止应用程序中的 CSRF。根据您的服务所具有的保护类型,您需要做的事情略有不同,而且可能相对困难。

可能最著名的保护是using synchronizer tokens,在这种情况下,您必须先下载页面,读取令牌并在后续请求中将其传回,基本上模拟真实用户。由于同步器令牌是有状态的(需要用户会话形式的服务器状态),并且您的用例是 RESTful 服务,我想这不是实现的方法。

另一种更适合服务的保护可以是double posting 的一些变体。在这种情况下,根据实施情况,您很可能必须发回与 cookie 和请求标头相同的令牌值。

服务使用的另一种方法可能是encrypted tokens,从您的角度来看,它类似于同步器令牌(但无状态)。

另一种(顺便说一句,安全性要低得多)方法可能只是检查请求中的引用者和/或源头。在这种情况下,您只需添加适当的请求标头即可。

我建议您在 Windows 上使用像 Fiddler 这样的代理或在 Linux(或 Windows)上使用像 ZAP Proxy 这样的代理来观察服务通常使用什么方法,它需要什么标头值和 cookie 名称等。然后您可以您自己的请求以正确的方式发送,按照您的服务所期望的方式发送 CSRF 令牌。

最简单的方法是先打一个 GET 服务,这样我们就可以得到响应以及 CSRF 令牌。我们可以在再次发送 POST 请求时使用该 CSRF 令牌。 CSRF 令牌可以在 POSTMAN 客户端响应的Body 下找到。

【讨论】:

  • 如果我的应用程序没有 GET 服务怎么办?
猜你喜欢
  • 1970-01-01
  • 2015-02-11
  • 2015-01-26
  • 1970-01-01
  • 2019-10-08
  • 2018-11-26
  • 2021-10-07
  • 2020-05-11
  • 2021-12-26
相关资源
最近更新 更多