1. 概述
每次我们测试带有CSRF保护的端点时,都必须手动从cookie中获取CSRF令牌,并将其设置在X-XSRF-TOKEN
请求头中。如果我们未发送CSRF令牌,将收到一个403 Forbidden
错误。
在这个教程中,我们将了解如何在使用Postman时自动化向服务器发送CSRF令牌。
2. 应用程序设置
我们不会讨论如何在Spring应用程序中启用CSRF保护,这已经在之前的文章中详细讲解过。
我们知道,CSRF令牌可以在客户端的cookie中找到,且默认情况下,对于POST
、PUT
和DELETE
HTTP动词都会应用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-token
。X-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令牌。