在Rails控制器中,我可以像這樣設置一個cookie:如何在rails中默認使cookie安全(僅限https)?
cookies[:foo] = "bar"
並指定「安全」(https-only)標誌如下:
cookies[:foo, :secure => true] = "bar"
:secure
爲false默認。如何在應用程序範圍內默認使用cookie?
這是在Rails 2.3.8
在Rails控制器中,我可以像這樣設置一個cookie:如何在rails中默認使cookie安全(僅限https)?
cookies[:foo] = "bar"
並指定「安全」(https-only)標誌如下:
cookies[:foo, :secure => true] = "bar"
:secure
爲false默認。如何在應用程序範圍內默認使用cookie?
這是在Rails 2.3.8
感謝@knx,你給我做在正確的道路上。這裏是我想出的monkeypatch,這似乎是工作:
class ActionController::Response
def set_cookie_with_security(key, value)
value = { :value => value } if Hash != value.class
value[:secure] = true
set_cookie_without_security(key, value)
end
alias_method_chain :set_cookie, :security
end
你怎麼看?
快速和髒溶液:我認爲這是可以通過在動作包餅乾模塊修改[] =方法(ActionPack的/ LIB/action_controller/cookies.rb)
來自:
def []=(name, options)
if options.is_a?(Hash)
options = options.inject({}) { |options, pair| options[pair.first.to_s] = pair.last; options }
options["name"] = name.to_s
else
options = { "name" => name.to_s, "value" => options }
end
set_cookie(options)
end
到:
def []=(name, options)
if options.is_a?(Hash)
options.merge!({:secure => true})
options = options.inject({}) { |options, pair| options[pair.first.to_s] = pair.last; options }
options["name"] = name.to_s
else
options = { "name" => name.to_s, "value" => options }
end
set_cookie(options)
end
開始與軌3.1,根據the rails security guide,你可以簡單地設置在application.rb
如下:
config.force_ssl = true
這迫使只發送的cookie通過https(我假設一切,太)。
# session only available over HTTPS
ActionController::Base.session_options[:secure] = true
這是軌道4中的一項新功能嗎? – 2013-11-20 21:34:50
我不知道。但是,在Rails 4中它起作用。您也可以在您的Rails版本中查看此屬性。 – alsotang 2013-11-21 08:05:40
這僅適用於會話cookie,對不對?一般來說不用於Cookie? – 2014-04-13 23:26:29
沒有必要給猴補丁ActionController
/ActionDispatch
,和force_ssl
具有副作用(例如,當behind an ELB)。
的最直接的方式來實現安全cookie是修改config/initializers/session_store.rb
:
MyApp::Application.config.session_store :cookie_store, key: '_my_app_session',
secure: Rails.env.production?
這是正確的答案(證實這可以在Rails 4.2.7.1中使用)。爲了方便測試,請設置'secure:true',然後您可以驗證cookie是否正確生成。然後,您可以將其更改回'Rails.env.production?' – PlagueHammer 2016-12-03 01:01:14
,看起來這隻會影響會話Cookie。詢問的人要求安全,作爲所有cookie的默認值。 Can @ david-cain可以驗證該解決方案是否適用於所有Cookie? – 2017-09-15 17:48:20
你應該看看機架SSL的實施者寶石。我只是在尋找一個乾淨的答案,它解決了這個問題,無論你使用哪個版本的Rails,還有它是非常可配置的。
約翰,在Rails應用程序中,我們將類放在上面? – Rafael 2012-05-17 21:48:29
在初始化器 – 2012-05-17 23:06:15
很好。謝謝。還有一件事,我的開發env - 使用webrick - 當我在environment.rb中將安全標誌設置爲true時,我無法通過我的登錄屏幕 - 我注意到應用程序在響應中設置了cookie。任何想法可能會發生什麼? – Rafael 2012-05-18 14:11:41