pup*_*eno 8 security encryption cookies ruby-on-rails
我需要在Rails中的cookie中存储一小段数据(少于10个字符),我需要它是安全的.我不希望任何人能够读取该数据或注入他们自己的数据(因为这会打开应用程序进行多种攻击).我认为加密cookie的内容是要走的路(我应该签名吗?).最好的方法是什么?
现在我正在这样做,这看起来很安全,但对于那些比我更了解安全性的人而言,许多事情看起来都很安全,然后发现它并不是真正安全的.
我以这种方式保存秘密:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
cookies[:secret] = {
:value => encryptor.encrypt(secret),
:domain => "example.com",
:secure => !(Rails.env.test? || Rails.env.development?)
}
Run Code Online (Sandbox Code Playgroud)
然后我就这样读它:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
secret = encryptor.decrypt(cookies[:secret])
Run Code Online (Sandbox Code Playgroud)
这样安全吗?有没有更好的方法呢?
更新:我了解Rails的会话及其安全性,通过签名cookie和可选地存储会话服务器端的内容,我确实使用会话来实现它的目的.但我的问题是关于存储cookie,这是我在会话中不想要的一条信息,但我仍然需要它是安全的.
Har*_*tty 13
设置安全cookie
cookies.signed[:secret] = {
:value => "foo bar",
:domain => "example.com",
:secure => !(Rails.env.test? || Rails.env.development?)
}
Run Code Online (Sandbox Code Playgroud)访问cookie
cookies.signed[:secret] # returns "foo bar"
Run Code Online (Sandbox Code Playgroud)使用ActionController :: Base.cookie_verifier_secret对cookie进行签名.您可以cookie_verifier_secret在初始化文件中设置.
我重新发布JacobM的答案,他删除了它,因为这是正确的答案,并为我指明了正确的方向。如果他取消删除,我会删除这个并选择他作为最佳答案。
首先,如果您使用它,
encrypt_and_verify它将encrypt为您签署 cookie。然而,当谈到安全性时,我总是更喜欢依赖经过公开审查的解决方案,而不是自己推出的解决方案。一个例子是crypto-cookies gem。