【问题标题】:A pattern to implement a secure client side session storage (web site)实现安全客户端会话存储的模式(网站)
【发布时间】:2013-12-31 04:32:42
【问题描述】:

我需要在页面访问之间存储分页组件的状态(具体来说,我需要保存当前查看的页面、每页显示的项目数以及过滤/搜索条件文本)。

起初我考虑使用 localStorage 创建客户端本地会话。但这在 IE8 中不起作用,所以我在 IE8 中回退到使用会话 cookie。但过滤/搜索条件是敏感数据,因此会话 cookie 是不可接受的。

现在我正在考虑使用服务器端会话存储,但我想让实现透明化。这个想法是创建一个名为“本地会话”的全局 javascript 对象(或 jQuery 插件)。本地会话实现将随每个请求发送其内容(使用 jQuery AJAX beforeSend 回调)。因此,每个请求都会发送客户端“本地会话”的新状态。

服务器将在每个新呈现的页面中包含所有本地会话数据(即仅用于非 AJAX 响应)。

我正在使用 ASP.NET MVC,很容易创建一个全局过滤器,该过滤器将收集此“本地会话”数据并将其存储在服务器端会话中。

两个问题:

  1. 在 javascript 对象中存储敏感数据是否比在会话 cookie 中存储这些数据更安全?
  2. 将本地会话内容作为标头发送是否是个好主意(我可以进行一些优化,仅在实际更改时发送,甚至仅发送更改)。
  3. 对于实施此要求还有其他建议吗?

注意:使用历史 API 在 IE8 中不起作用,它也不是我所需要的(即使我通过点击链接而不是点击返回按钮返回页面,页面状态也应该保​​持不变)。

注意:如果解决方案在 cookie 被禁用时也能正常工作,那就太好了,但这并不是一个严格的要求。

【问题讨论】:

  • 支持IE8害死我,感受你的痛

标签: session cookies session-cookies


【解决方案1】:

如果您想保护发送到浏览器以存储在 cookie 中的内容的完整性和机密性,您可以使用服务器端密钥对值进行签名和加密,例如在 Ruby on Rails 版本 4 中。

但是,请记住,cookie 会受到重放攻击,并且存在大小限制。

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2015-06-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多