我需要在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