gpt4 book ai didi

ruby-on-rails-4 - 在提供 Web 和 API 的 Rails 应用程序中正确使用protect_from_forgery

转载 作者:行者123 更新时间:2023-12-04 15:42:16 25 4
gpt4 key购买 nike

我正在开发一个 Rails 4 应用程序,它通过 API 为移动应用程序提供服务,并有一个 Web UI 供管理员管理应用程序。用户还将看到几个网页(成功的电子邮件确认和重置密码)。

我创建了两组 Controller :一组继承自 APIController,另一组继承自 AdminController。这两个都继承自 ApplicationController。负责面向用户的网页的其余 Controller 也继承自 ApplicationController。

鉴于此方案,我不确定如何使用protect_from_forgery 正确实现CSRF 保护。我目前有以下几点:

class ApplicationController < ActionController::Base
# ...
end

module API
class APIController < ApplicationController
protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
# ...
end
end

module Admin
class AdminController < ApplicationController
protect_from_forgery with: :exception
# ...
end
end

class UsersController < ApplicationController
protect_from_forgery with: :exception
# ...
end

所以我的问题是:这是正确的吗?有什么办法可以改善吗?由于所有 API 请求都只是 JSON,因此检查 APIController 是否毫无意义?

Brakeman 提示ApplicationController 中没有protect_from_forgery 调用,但也许它没有看到子类中的调用。

提前致谢!

最佳答案

你可以看到here, on their (brakeman) Github page它检查 ApplicationController 上是否存在只要

您的管理员和用户 Controller 可以使用 protect_from_forgery with: :exception
Rails 4 上 protect_from_forgery 的默认行为是 :null_session ,您可以删除选项 with:如果你想。

关于改进,我将实现一种在用户中保存 token 并匹配每个请求的方法,这样请求 API 的用户必须在每个请求中发送他的 token 。这样做可以避免获取 CSRF token 然后使用此 token 发送请求的必要性。例如,对于移动用户,这是一个额外的请求,您只需保存正确的 token 即可解决。如果有人得到这个 token ,它可以作为用户传递并更改数据。但是您可以寻找更多有关如何使其更安全的方法。

如果您将 token 保存在 session 或 cookie 中,CSRF 可能会发生,您必须独立处理,以防您选择这样保存。

如果你打算在手机上使用API​​,把token(在我先说的策略中)保存在手机上(内存或本地数据库),这样会更安全。

关于ruby-on-rails-4 - 在提供 Web 和 API 的 Rails 应用程序中正确使用protect_from_forgery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34191423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com