在本地存储中存储凭据

fan*_*ncy 25 javascript security encryption html5 local-storage

我可以安全地使用本地存储而不是cookie来存储会话凭据吗?

我需要存储加密的哈希吗?

编辑:这足够安全吗?

  • 用户登录.

  • 服务器返回成功消息,包括salted bcrypt哈希混合用户ID,密码,时间戳和可能的IP地址.这将保存在本地存储中.

  • 在将来连接时,发送此哈希,只要IP地址未更改,服务器就会承担责任,并且时间限制尚未过期.

sim*_*olo 20

localstorage与JavaScript一样容易被JavaScript读取.

可以使用来自同一域的JavaScript来读取localstorage ,如果您控制域上的所有JS,那么这应该不是问题.但是,如果执行任何其他代码(例如通过注入,或者如果您与其他人共享域),他们将能够访问存储数据.

但是对于cookie来说这是相同的,但通常将cookie设置为HTTPOnly,因此JavaScript无法读取它.

在任何一种情况下,无论如何都不应将纯文本登录信息存储在cookie或localstorage中,就像有人确实抓住它们一样,它们可以不断地为自己创建一个新会话.

您应该加密经过身份验证的标识符(例如其用户ID)以及会话过期的日期时间,然后将此值存储在cookie或本地存储中.然后在每次服务器调用时验证此令牌.


Dav*_*ler 10

如果您要使用本地存储,为什么要存储用户凭据或从中获取的任何内容?

我一直在做的是:

成功登录后,生成与用户凭据无关的完全随机的字符串,并将其存储在数据库中,并附带到期日期.然后我会将该字符串传递给我的js以存储在本地存储中.

从那时起,只要本地存储凭证与数据库1匹配且超时未到期,我自动认为它们已登录.

这样,就没有关于从本地存储中暴露用户凭证的风险.但是,如果此临时唯一字符串基本上用作sessionID,您仍需要了解并预防与会话劫持相关的风险.

无论如何,我的理解是本地存储与您站点后面的服务器一样安全.我的意思是本地存储只能通过自己域中的脚本访问,所以只要运行的前端代码是您自己的,您就是安全的.


c-s*_*ile 5

您的服务器应生成一些令牌-唯一的(对于服务器而言)数据块,不能用于发现用户名/密码。只有该令牌可以任何形式存储在用户的计算机上。localStorage和cookie都不安全。因此,在这方面,同样的规则适用于他们。

您应该有一些使该令牌失效的方法,否则一旦被盗用就可以代替真实凭证使用。