`protect_from_forgery with: :exception` 会导致进程崩溃吗?
Does `protect_from_forgery with: :exception` crash process?
我正面临这样一种情况,即在敏感(已注销)端点上有坏人 POST-ing JSON 大规模。
除了通过 IP 进行速率限制外,我还想将 protect_from_forgery with: :exception
作为 before_filter 添加到 Rails 应用程序。
该过滤器 return 是 500 响应还是实际上引发了导致 Rails 进程崩溃的未捕获异常?在本地看来是后者。
我担心未经身份验证的机器人会通过反复崩溃进程来有效地对服务进行 DDOS。
不,您的应用程序中所有未捕获的异常都应由 Rails(或 Rack)拯救并记录,并向客户端返回 500 错误。只有段错误或其他严重故障才会导致进程终止。即使在这种情况下,一个好的网络服务器(比如 Puma)也会重新启动该过程。但是,即使 Puma 设法死掉,您的生产环境也应该有一个进程监视器(god、monit 等),如果它失败或超出内存限制,它将重新启动 Web 服务器。
我很好奇你所说的 "locally, it appears to [crash the Rails process]" 是什么意思。您的 rails server
命令实际上是在 CRSF 异常时退出?
我正面临这样一种情况,即在敏感(已注销)端点上有坏人 POST-ing JSON 大规模。
除了通过 IP 进行速率限制外,我还想将 protect_from_forgery with: :exception
作为 before_filter 添加到 Rails 应用程序。
该过滤器 return 是 500 响应还是实际上引发了导致 Rails 进程崩溃的未捕获异常?在本地看来是后者。
我担心未经身份验证的机器人会通过反复崩溃进程来有效地对服务进行 DDOS。
不,您的应用程序中所有未捕获的异常都应由 Rails(或 Rack)拯救并记录,并向客户端返回 500 错误。只有段错误或其他严重故障才会导致进程终止。即使在这种情况下,一个好的网络服务器(比如 Puma)也会重新启动该过程。但是,即使 Puma 设法死掉,您的生产环境也应该有一个进程监视器(god、monit 等),如果它失败或超出内存限制,它将重新启动 Web 服务器。
我很好奇你所说的 "locally, it appears to [crash the Rails process]" 是什么意思。您的 rails server
命令实际上是在 CRSF 异常时退出?