Rails 4不加密cookie内容
你好我正在尝试加密和保护我的cookie中包含的数据,但似乎数据只被编码(base64)
这是一个例子:
cookies.signed[:example] = { :value => 'can you see this?', :httponly => true, :expire_after => 30.minutes, :secure => true }
这是cookie的内容:
BAhJIhZjYW4geW91IHNlZSB0aGlzPwY6BkVG--b4a8bbd7cd35e392ccd788df0008fd10b48442b2
如果我解码字符串(base64)我得到:
I"can you see this?:EFom{q{vq{_M<}to8f
我想知道我错过了什么,目前这就是我所拥有的
session_store.rb:
Service::Application.config.session_store :cookie_store, key: '_service_session'
在我的secret_token.rb中我设置了这样的东西:
Service::Application.config.secret_key_base = 'e892d55cbc205bb6..'
你的cookis没有加密,因为你在cookie jar上使用了signed
方法,而且只是签署了cookie内容。
要加密cookie,请使用encrypted
方法:
cookies.encrypted[:discount] = 45 # => Set-Cookie: discount=ZS9ZZ1R4cG1pcUJ1bm80anhQang3dz09LS1mbDZDSU5scGdOT3ltQ2dTdlhSdWpRPT0%3D--ab54663c9f4e3bc340c790d6d2b71e92f5b60315; path=/ cookies.encrypted[:discount] # => 45
撇开接受的答案:
根据您的具体情况:如果您需要加密,可能需要考虑使用会话cookie。 (正如已接受的答案所示:您可以加密cookie,但是会话cookie可能更合适)。
默认情况下,在rails 4中:会话cookie默认为加密和签名。
相关的Rails文档 。
具体部分:
如果您只设置了secret_token,则您的cookie将被签名,但不会加密。 这意味着用户无法在不知道应用的密钥的情况下更改其user_id,但可以轻松读取其user_id。 这是Rails 3应用程序的默认设置。
如果您设置了secret_key_base,则您的cookie将被加密。 这比签名cookie更进一步,因为加密的cookie不能被用户更改或读取。 这是Rails 4中的默认开头。
secret_key_base
默认位于rails 4中:config / secrets.yml。
在rails 4中的用法:
# In rails 4 by default, this will be encrypted and signed session[user_id] = 1
- Rails + Sinatra应用程序共享会话
- Rails中签名和加密的cookie有什么区别?
- 从视图中设置cookie,然后从Rails中的Controller读取它
- 如何在rails中默认使cookie安全(仅限https)?
- RSpec与Cookies – 即使应用程序正常工作(模拟已登录的用户),测试也会失败
- 在Ruby on Rails 4(欧盟立法)中强制禁用cookie,直到用户(重新)接受ToS
- 确保用户使用cookieStore和AngularJS登录或注销的最佳实践
- Sinatra – response.set_cookie不起作用
- 在rails 3和rails 4.1之间共享cookie