会话存储可以安全吗?

Posted

技术标签:

【中文标题】会话存储可以安全吗?【英文标题】:Can session storage be safe? 【发布时间】:2011-08-09 07:55:09 【问题描述】:

我想使用会话存储在数据库中只查询一次用户数据,然后简单地使用JS来检索它,所以我正在考虑使用会话存储。我的问题是接下来,这安全吗?

请注意:

1.JS不能插入到有表单的页面(表单只接受字母数字值)所以只能来自URL

1.1 php 中不使用 www.website.com/?q=blablabla 之类的查询字符串(php 不会从 url 检索任何数据)

1.2 使用 javascript:script... 在 url 中调用 js 不是一个大问题,因为用户只能访问自己的数据,更不用说他已经可以访问它了 - 这就是用户数据点

1.3 是否有第三种方法可以通过包含 JS 的链接将用户重定向到该站点,该链接将能够访问会话存储?即:类似 - www.website.com/script...

我的猜测是,只有 1.3 之类的东西才会构成威胁(除此之外,我是否遗漏了什么?)但这真的存在吗?如果是这样,有没有办法防止它?

感谢您的时间和回复。

【问题讨论】:

请详细说明“安全”的含义。我假设您的意思是“它对从其他页面读取它的恶意 JavaScript 的保护有多好”? @chiborg 这正是我的意思——我知道即使 JS 达到了会话存储,它也需要知道键值。此外,会话存储与域相关联。问题是关键最终可以被猜到。因此,我认为安全性主要依赖于绑定到域的会话存储(因此担心我的帖子中的 1.3)。 【参考方案1】:

您实际上依赖于两件事来确保会话存储安全:

    浏览器仅限制访问 来自该域的页面上的 javascript 为了安全而在页面上运行的javascript

现在,对于第一名,您无能为力,因为这是供应商的问题,并且没有特别指出任何人,但 大多数 他们中的大多数人通常都非常擅长这种事情.

因此,您可以相当确定任何其他选项卡、域、浏览器或进程上的其他代码都无法看到您的存储对象。

但是,第 2 点比较困难,您必须自己评估您的页面对脚本攻击的安全性,那里有大量关于最佳实践的文档,但您可以持续数天。您确实需要判断数据的敏感程度与保护数据的工作量以及可能丢失的功能。

如果它真的是敏感数据,我会质疑你为什么要冒险在客户端存储它并且只能通过 HTTPS 访问。但是您的网站应该受到大多数脚本攻击的保护,因为如果 3rd 方 javascript 正在运行会话 cookie,那么您的服务器安全也会受到威胁。

【讨论】:

【参考方案2】:

由于会话存储只能由您页面上运行的 JavaScript 读取,我认为您的问题归结为“如何将 JavaScript 执行/插入到我的页面中?”有两种攻击方法:XSS, 表示通过将数据发布到您的站点来将 JavaScript 注入您的页面的某种方式。如果未过滤此数据,它可能会在您的 html 中插入脚本标记或 JavaScript 事件。有很多方法可以做到这一点并防止它发生,所以我不能更具体。

较小的威胁是通过调用您页面上的特定操作的特制链接来欺骗网站显示或更改信息。这种技术称为CSRF。示例:有人制作了一个指向“更改电子邮件”页面的链接,并欺骗登录的用户单击此链接,从而更改了会话存储中的电子邮件信息。

如果您的应用程序是公开的,任何人都可以在其浏览器中打开会话存储并查找密钥的名称。因此,除非它们是随机的,否则在这里不提供任何保护。

【讨论】:

1.每个用户的密钥都是随机的; 2. 就通过表格发布内容而言,这已经很好地涵盖了(正如我所说,只有字母数字才能通过); 3.我不确定您是否指的是用于在页面上显示内容的查询字符串,例如 www.website.com/?q=blablabla 并且 blabla 将由 php 显示在页面上 - php 不使用任何来自 url 的数据;我最担心的是是否有办法在用户单击链接时执行的链接中插入 JS。像 javascript:script... 之类的东西(如果有人使用 iframe,也许 javascript: 很危险?) 其实你把CSRFXSS混在一起了。

以上是关于会话存储可以安全吗?的主要内容,如果未能解决你的问题,请参考以下文章

pageContext.request.userPrincipal 是不是存储在会话中?我也可以得到密码吗?

站点用户可以更改 cookie 或会话数据吗?

使用 Redis 存储会话有多安全?

可以禁用会话存储/本地存储并启用 Cookies 吗?

PHP 会话的安全性如何?

我可以使用 html5 本地存储来存储用户身份验证会话信息吗