你好我正在尝试加密和保护我的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..'
答案 0 :(得分:3)
您的Cookie未加密,因为您在Cookie jar上使用了signed
方法,而且只是签署了Cookie内容。
要加密Cookie,请使用encrypted
方法:
cookies.encrypted[:discount] = 45
# => Set-Cookie: discount=ZS9ZZ1R4cG1pcUJ1bm80anhQang3dz09LS1mbDZDSU5scGdOT3ltQ2dTdlhSdWpRPT0%3D--ab54663c9f4e3bc340c790d6d2b71e92f5b60315; path=/
cookies.encrypted[:discount] # => 45
答案 1 :(得分:1)
捎带接受的答案:
根据您的具体情况:如果您需要加密,可能需要考虑使用会话Cookie。 (正如公认的答案所暗示的那样:你可以加密cookie,但也许会话cookie更合适。)
默认情况下,在rails 4中:会话cookie默认为加密和签名。
具体部分:
默认情况下,如果您只设置了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