1. 概述

每次我们测试带有CSRF保护的端点时,都必须手动从cookie中获取CSRF令牌,并将其设置在X-XSRF-TOKEN请求头中。如果我们未发送CSRF令牌,将收到一个403 Forbidden错误。

在这个教程中,我们将了解如何在使用Postman时自动化向服务器发送CSRF令牌。

2. 应用程序设置

我们不会讨论如何在Spring应用程序中启用CSRF保护,这已经在之前的文章中详细讲解过

我们知道,CSRF令牌可以在客户端的cookie中找到,且默认情况下,对于POSTPUTDELETEHTTP动词都会应用CSRF保护。

为了测试,我们将使用上一篇文章中的一个端点,一个用于用户转账的POST请求:

POST http://localhost:8080/transfer?accountNo=1234&amount=100

3. Postman

首先,我们不考虑CSRF令牌运行一次测试,然后我们将发送CSRF令牌并设置Postman自动发送。

3.1. 不考虑CSRF令牌的测试

打开Postman,添加一个新的请求:

现在,我们不发送CSRF令牌执行请求,会得到403 Forbidden错误:

接下来,我们将看看如何解决这个问题。

3.2. X-XSRF-TOKEN头属性

Headers选项卡中,添加一个新的参数,名为X-XSRF-TOKEN,值设为xsrf-tokenX-XSRF-TOKEN是CSRF的头字段,而xsrf-token是我们将在后定义的一个环境变量:

3.3. 环境变量xsrf-token

现在转到左侧的Environments,创建一个新的环境,命名为DEV:

在右侧,定义我们之前提到的环境变量xsrf-token。其余字段保持空:

回到请求,从右上角选择DEV环境,以便使用我们定义的环境属性:

3.4. 脚本

现在点击Tests选项卡。在这里添加以下脚本:

脚本从XSRF-TOKEN cookie中获取值,并将其分配给环境变量xsrf-token。这样,服务器返回的任何XSRF-TOKEN值都将被转移到X-XSRF-TOKEN头属性中。

3.5. 测试

当我们执行请求时,现在会收到200 OK响应:

3. 总结

在这篇文章中,我们了解了如何测试一个启用CSRF保护的应用程序端点。

我们使用Postman客户端来自动化每次在同一端点执行新请求时发送CSRF令牌的过程。这样更高效,因为我们无需手动获取并设置请求头中的CSRF令牌。