Ruby on rails RubyonRails中CookieStore会话和加密Cookie的区别

Ruby on rails RubyonRails中CookieStore会话和加密Cookie的区别,ruby-on-rails,security,cookies,session,Ruby On Rails,Security,Cookies,Session,我想知道会话和加密cookie(配置为与会话cookie一样过期)之间是否有任何区别 他们不是一模一样吗?还是Rails为会话提供了额外的安全性?会话比cookie更高级。会话是变量的集合,这些变量仅对一个用户会话有效。会话可以存储在cookie、数据库或会话处理插件选择存储它们的任何位置。Cookie现在是现代版本Rails中存储会话的默认位置。注意:当会话存储在cookie之外时,cookie中存储有一个ID,因此Rails可以在存储会话数据的任何位置(例如数据库)查找会话数据 现在,让我继

我想知道会话加密cookie(配置为与会话cookie一样过期)之间是否有任何区别


他们不是一模一样吗?还是Rails为会话提供了额外的安全性?

会话比cookie更高级。会话是变量的集合,这些变量仅对一个用户会话有效。会话可以存储在cookie、数据库或会话处理插件选择存储它们的任何位置。Cookie现在是现代版本Rails中存储会话的默认位置。注意:当会话存储在cookie之外时,cookie中存储有一个ID,因此Rails可以在存储会话数据的任何位置(例如数据库)查找会话数据

现在,让我继续讨论我认为您想要问的问题:Rails的默认会话存储(使用未加密的cookie)和其他任何加密的cookie会话存储实现之间有什么区别?为什么要加密会话cookie

根据,这里是区别的关键:“EncryptedCookieStore类似于Ruby on Rails的CookieStore(它将会话数据保存在cookie中),但它使用加密,因此人们无法读取会话数据中的内容。这使得在会话中存储敏感数据成为可能。”

请注意,有多个不同的EncryptedCookieStore。好了,你想用的是ThinkAssociation的加密CookieStore,而不是ThinkAssociation的旧版本

如果您没有加密cookie,那么任何有权访问cookie的人(通过网络嗅探器、对客户端的磁盘访问、XSS等)都可以轻松读取会话数据。有关如何将会话变量存储到cookie中的详细信息(以及安全含义),请参见此处:

请注意,默认(非encrytped)cookie存储是防篡改的(这意味着Rails将拒绝恶意更改的cookie)。因此,如果您所担心的只是阻止人们更改您的cookie(但不关心他们是否看到您的cookie),那么您可以使用默认设置。

Rails使用HMAC()来保证没有人根据Rails存储cookie的方式修改cookie。