【问题标题】:Sidekiq + Rails 6.0.0 in API mode : WARN -- : attack prevented by Rack::Protection::AuthenticityTokenAPI 模式下的 Sidekiq + Rails 6.0.0 : WARN -- : 攻击被 Rack::Protection::AuthenticityToken 阻止
【发布时间】:2019-09-17 14:22:27
【问题描述】:

我目前正在尝试设置独立的 rails 6.0.0 API 全新安装 (rails new xxx --api) + sidekiq(包括 Rack::Protection)

设置 Rack::Cors 后,我在任何非 GET 请求上都会收到以下 403 错误:

WARN -- : Rack::Protection::AuthenticityToken 阻止了攻击

据我了解,这与 CSRF 令牌有关,这对 json API 没有意义。

这是我正在执行的请求的副本:

curl 'http://127.0.0.1:5100/searches' -H '接受:应用程序/json, text/plain, /' -H 'Referer:http://localhost:8080/' -H '来源: http://localhost:8080' -H '用户代理:Mozilla/5.0(Macintosh;英特尔 Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, 像 Gecko) Chrome/76.0.3809.132 Safari/537.36' -H 'Sec-Fetch-Mode: cors' -H '内容类型:应用程序/x-www-form-urlencoded' --data '{查询: 'test'}' -- 压缩

我无法解决的 2 个可能的解决方案:

  • 禁用机架保护

  • 在控制器 (ActionController::API) 中获取令牌以传递给请求

【问题讨论】:

    标签: ruby-on-rails sidekiq rack ruby-on-rails-6


    【解决方案1】:

    在 ApplicationController 中尝试 protect_from_forgery with: :null_session,或在 config/initializers/rack-cors.rb 中尝试 Rails.configuration.middleware.insert_before 0, Rack::Cors do allow do origins "*" end end

    【讨论】:

    • 谢谢,但运气不好,ActionController::API 中没有定义protect_from_forgery(请求在到达控制器之前被机架阻塞),更新后的cors配置没有变化
    • 试试这样的帖子 :payment, :csrf_protection => false in routes.rb
    • routes.rb 在 rack 之后调用
    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多