Angularjs 会话ID验证-安全性-离子/角度

Angularjs 会话ID验证-安全性-离子/角度,angularjs,security,ionic-framework,Angularjs,Security,Ionic Framework,在过去的一个月里,我一直在努力解决这个问题 当用户登录时,将在数据库中创建一个会话令牌,并将其存储在localStorage中。这使我能够在每次进行关键服务器调用时验证用户(通过将sessionID插入服务器并将其值与数据库中存储的值进行比较),但如果我从任何用户的localStorage复制特定会话ID,我也可以粘贴到localStorage上并进行验证。这是一个非常大的差距,我需要填补。验证sessionID并避免他人复制和粘贴它的正确方法是什么?如何将localStorage编码给用户 注

在过去的一个月里,我一直在努力解决这个问题

当用户登录时,将在数据库中创建一个会话令牌,并将其存储在localStorage中。这使我能够在每次进行关键服务器调用时验证用户(通过将sessionID插入服务器并将其值与数据库中存储的值进行比较),但如果我从任何用户的localStorage复制特定会话ID,我也可以粘贴到localStorage上并进行验证。这是一个非常大的差距,我需要填补。验证sessionID并避免他人复制和粘贴它的正确方法是什么?如何将localStorage编码给用户

注意:SessionID是使用JWT创建的, 会话令牌是完全随机的,在登录后创建,
该值存储在用户列的一列中,并保存在本地存储中。您无法完全防止此类情况发生。如果攻击者具有对计算机的物理访问权限,以便能够从本地存储中复制和粘贴,则您无法阻止他们


您可以做一些事情来稍微缓解它,但它们比其他任何事情都更像是粉饰,它们通常会导致比解决问题更多的问题。其中之一是将会话固定到IP地址。如果会话从一个地址开始,然后移动到另一个地址,则可以使会话无效并强制用户重新验证。然而,当合法用户的机器跨越网络时,这会给他们带来许多问题。移动设备加剧了这一问题,但即使是静止的机器也难以保持稳定的IP地址。

感谢分享您的意见。我同意ip地址固定听起来有问题。+1是一个好的、合理的答案。一些可能增加价值的增强功能是定期(比如每10分钟)更改令牌,以减少复制令牌的机会窗口(并记录重播尝试)还要确保提供一个明确的注销功能,在本地存储中分解副本。还要注意,在本地存储中存储会话标识符会使其容易受到XSS的影响。应用程序中的任何单个XSS都可以用来从客户端窃取此信息,而无需物理访问。在您的场景中,这可能是可接受的,也可能是不可接受的。一个更安全的解决方案是将其存储在httpOnly cookie中,但这样您就无法访问Javascript(这就是重点),还必须关心CSRF之类的事情。