为什么我的控制器没有因为未使用skip_forgery_protection而出现故障?



我正在将rails应用程序从5.2升级到6.1。以前我使用5.1默认值,现在我使用6.1默认值。

在rails 5.2中,伪造保护成为默认值。所以,当我一直升级到6.1时,有些东西开始坏了。

我将skip_forgery_protection添加到我的图形控制器中,并修复了所有失败的测试。没有测试访问其他控制器(绝对没有在前端实现伪造系统)失败,也没有我手动尝试的其他事情。

我有一个理论是forgery_protection只适用于POST, PUT, PATCH和DELETE,但我发现网上没有讨论或提到这个,这似乎不是我观察到的(尽管我承认我还没有彻底地测试这个理论)。

所有内容都继承自同一个ApplicationController

发生了什么事?

我不太明白你的问题。

但是,如果你问为什么forgery_protection只适用于POST、PUT、PATCH和DELETE,那么文档说,

Turn on request forgery protection. Bear in mind that GET and HEAD requests are not checked.

来自维基百科

特别地,约定已经建立,GET和HEAD方法不应该具有采取除检索以外的操作的意义。这些方法应该被认为是"安全的"。这允许用户代理以一种特殊的方式表示其他方法,如POST、PUT和DELETE,这样用户就知道正在请求一个可能不安全的操作。

由于这个假设,web框架中许多现有的CSRF预防机制将不包括GET请求,而只是将保护应用于旨在改变状态的HTTP方法。

相关内容

最新更新