如何使用 Postman Rest Client 获取和重用 CSRF 令牌

How to fetch and reuse the CSRF token using Postman Rest Client

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

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

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

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

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

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

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

还有另一种(顺便说一句,安全性低得多)方法可能只是检查请求中的引用 and/or 来源 header。在这种情况下,您只需添加适当的请求 headers.

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

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

1) 在 Chrome/Firefox 中,右键单击任意位置打开控制台,然后选择 "inspect"(对于 Chrome)或 "inspect element"(对于 Firefox)。

2) Select "network" 选项卡。 3) 4)

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

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