我需要在Rails中的一个cookie中存储一小段数据(少于10个字符),并且我需要它是安全的。我不希望任何人能够读取这些数据或注入他们自己的数据(因为这会打开应用程序以应对各种攻击)。我认为加密cookie的内容是一种方式(我是否也应该签名?)。什么是最好的方式来做到这一点?使用Rails存储加密的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?)
}
,然后我读这样的:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
secret = encryptor.decrypt(cookies[:secret])
是不是安全的?任何更好的方法来做到这一点?
更新:我知道Rails的会话,以及它如何是安全的,由双方签署的cookie,并通过可选存储会话服务器端的内容,我使用的会话它是什么。但我的问题在于存储Cookie,这是我不想在会话中提供的一条信息,但我仍然需要它是安全的。
出于兴趣,它为什么需要存储在cookie中而不是服务器端,它在定义上更安全? – Russell 2012-02-20 16:56:55
@russell很好,你需要在浏览器中存储一些东西,对吧?否则你将无法再识别它。无论是实际数据还是表格中记录的标识,这都是关于数据大小和其他考虑因素的首选和必要问题。我存储的内容已经是表格中记录的标识。我可以创建另一张桌子,但在这种情况下看起来很浪费。 – Pablo 2012-02-20 17:14:36
我已经添加了一个答案,因为我认为更改默认会话存储以使用数据库会给你想要的安全性,只需很少的开销就创建表等。 – Russell 2012-02-20 23:35:12