Rails 5.1.5中如何设置cookie的HttpOnly属性为false?
核心原因
Rails 5.1版本存在两类会强制开启Cookie HttpOnly标识的场景,优先级高于单条Cookie的自定义参数:
- 全局配置开启了
config.force_ssl = true,该配置默认会自动为所有Cookie附加HttpOnly、Secure标识 - 项目引入的第三方安全扩展(如
secure_headers)存在默认Cookie安全规则,会覆盖自定义参数
解决步骤
- 调整force_ssl全局配置(如果开启了该配置),修改
config/environments/production.rb中的对应配置项,关闭全局强制HttpOnly规则:
# 原force_ssl配置如果为直接开启动 config.force_ssl = true # 修改为指定规则的形式 config.force_ssl = { hsts: true, cookies: { http_only: false } }
- 调整单条Cookie的设置参数,部分低版本Rails 5.1.x存在参数识别bug,可以同时添加
httponly: false作为兜底参数:
cookies[:imNotARobot] = { value: "true", max_age: 24*60*60, http_only: false, httponly: false, # 新增兜底兼容参数 secure: Rails.env == "development" ? false : true }
- 如果项目引入了安全类扩展,需要在对应扩展的Cookie配置中,添加当前Cookie的HttpOnly豁免规则。
修改后重启Rails服务重新请求,即可看到Set-Cookie响应头中不再携带HttpOnly标识。
内容的提问来源于stack exchange,提问作者Hairi
相关产品推荐
相关产品推荐

