gpt4 book ai didi

ruby-on-rails - 如何确保 Rails API 不受 CSRF 的影响?

转载 作者:行者123 更新时间:2023-12-04 05:21:26 31 4
gpt4 key购买 nike

我一直在开发带有 REST API 的 Rails 应用程序,以便从移动应用程序访问。

它运作良好。当用户从移动应用程序登录时,他得到auth_token他在 future 对 API 的请求中使用。问题是 API 也可以通过路径/api/v1/... 从网络访问,因此,它必须受到 CSRF 的保护。

我有 BaseApiController继承自 ApplicationController 的类有 protect_from_forgery “启用”。下面是例子:

class Api::V1::BaseApiController < ApplicationController
# ...
end

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

现在,当我对 API 执行非 GET 请求时,使用 auth_token ,我的请求成功完成,但在日志中我可以看到著名的 WARNING: Can't verify CSRF token authenticity .如果我删除 protect_from_forgery来自我的 BaseApiController ,我没有收到任何警告(显然),但是我的 API 容易受到 CSRF 攻击(我制作了一个简单的 HTML 表单,当没有 protect_from_forgery 时,它成功地跨域更改了数据)。

我的问题是:如何确保我的 API 保持安全,同时在执行非 GET 请求时删除警告?

这是我想出的解决方案之一,但它看起来更像是一个 hack 并执行一个额外的数据库查询:
class Api::V1::BaseApiController < ApplicationController
# ...
def verified_request?
super || User.where(authentication_token: params['auth_token']).count > 0
end
end

有关该项目的更多详细信息:Rails 3.2.14、Devise、AngularJS。项目源码可以在 here找到.

最佳答案

您可能会看到有人建议 CSRF 不是 API 请求的问题(开始时没有状态,所以无论如何要劫持什么?),所以有些人建议以下内容来简单地消除警告:

skip_before_filter :verify_authenticity_token, :only => [:your_method]

但是,有一些评论说可以使用 text/plain 提交 CSRF。使用各种基于 Flash 和 Java 的方法。我相信这就是不久前在 rails 中安装安全补丁的原因: http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails/

无论如何,可以在此处找到实际检查真实性 token 的好解决方案: WARNING: Can't verify CSRF token authenticity rails

它涉及在您的请求中实际设置 header 。

祝你好运!

关于ruby-on-rails - 如何确保 Rails API 不受 CSRF 的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18378902/

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