【问题标题】:How to set cookie to secure in Rails如何在 Rails 中设置 cookie 以确保安全
【发布时间】:2020-04-18 02:25:05
【问题描述】:

在我的 Rails 应用程序中,我想保护我的 cookie,但它不起作用。

我目前在我的 production.rb 文件中强制使用 SSL,但它并没有保护 cookie,即使它应该来自我阅读的内容。

我在 Rails 5+ 上,没有我在不同线程中看到的 session_store.rb 文件。我试过了,但我的 cookie 仍然不安全。

我尝试添加这个:

Rails.application.config.session_store :cookie_store, key: '_application_session', secure: true, httponly: true

但是,当我在控制台中使用 curl 时,我看不到“第二个”set-cookie。因此,当我登录我的网站时,它会将我重定向到索引而不登录。

我的 production.rb 中有这个:

 config.force_ssl = true
 config.to_prepare { Devise::SessionsController.force_ssl }
 config.to_prepare { Devise::RegistrationsController.force_ssl }
 config.to_prepare { Devise::PasswordsController.force_ssl }

如何在 Rails 5+ 上解决这个问题?

【问题讨论】:

  • 您是否通过https://访问您的应用程序?
  • 是的,我正在使用 https 来访问它,这只会让它更奇怪..

标签: ruby-on-rails ruby cookies


【解决方案1】:

已使用 Securityheaders gem 修复:https://github.com/github/secure_headers

使用以下内容制作了一个初始化器:

SecureHeaders::Configuration.default do |config|
    config.cookies = {
        secure: true, # mark all cookies as "Secure"
        httponly: true, # mark all cookies as "HttpOnly"
        samesite: {
            lax: true
        }
    }
    config.hsts = "max-age=#{1.week.to_i}"
    config.x_frame_options = "DENY"
    config.x_content_type_options = "nosniff"
    config.x_xss_protection = "1; mode=block"
    config.x_download_options = "noopen"
    config.x_permitted_cross_domain_policies = "none"
    config.referrer_policy = %w(origin-when-cross-origin strict-origin-when-cross-origin)
    config.csp = SecureHeaders::OPT_OUT
end

其余部分我只使用了 rails 的预构建 csp,因为它太复杂了,我无法使用 gem 手动完成。

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 2017-03-03
    • 2015-05-22
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多