Javascript 在客户端存储身份验证数据

Javascript 在客户端存储身份验证数据,javascript,authentication,local-storage,client-side,Javascript,Authentication,Local Storage,Client Side,我有一个应用程序,它使用主干JS来呈现它的视图(除其他外,比如模型等) 我的应用程序的一部分应该只显示给管理员用户,但是主干模板知道这一点的唯一方法是设置一些JS变量/localStorage/Cookie来指示这样的情况 首先担心的当然是安全问题。我只是把User.id、User.isAdmin等东西存储在这里。此外,由于仅限于管理员的事情会涉及服务器端参与,因此在客户端更改User.isAdmin=true只会给他们提供界面选项,但没有任何功能 我知道,使用Cookies来完成这类事情可能是

我有一个应用程序,它使用主干JS来呈现它的视图(除其他外,比如模型等)

我的应用程序的一部分应该只显示给管理员用户,但是主干模板知道这一点的唯一方法是设置一些JS变量/localStorage/Cookie来指示这样的情况

首先担心的当然是安全问题。我只是把User.id、User.isAdmin等东西存储在这里。此外,由于仅限于管理员的事情会涉及服务器端参与,因此在客户端更改
User.isAdmin=true
只会给他们提供界面选项,但没有任何功能

我知道,使用Cookies来完成这类事情可能是不受欢迎的,而且有很好的理由,因为Cookies在所有HTTP请求之间来回发送,造成了不必要的开销


因此,我的问题是,如何最好地告诉客户端应用程序有关用户身份验证数据的信息。我正在使用jStorage(http://www.jstorage.info)用于本地存储访问,但不使用会话存储。后者是否比前者更合适?

一般来说,您需要服务器上的角色和权限。这样,即使恶意用户调整客户端,用户也无法实际访问或修改受限数据,因为如果他们尝试,他们仍然没有修改服务器上的角色。如果您审核日志访问,您将很快知道用户是否尝试了他们没有权限的操作

在这样的方案下,最糟糕的情况是用户可以看到管理屏幕的样子。这仍然可能是一个漏洞,因为他们可能会看到可以告知他们系统如何工作的按钮


如果您需要保护它,您可以延迟加载应用程序“管理部分”的模板,直到用户角色得到验证。因此,所有受限制的部分几乎都作为单独的应用程序(或实际单独的应用程序)加载。这样,即使用户试图欺骗客户端加载管理部分,当请求到达服务器时,您也不会返回模块,因为服务器不会显示用户具有管理权限

我应该在我的问题中澄清(“在客户端更改User.isAdmin=true只会给他们接口选项,但没有任何功能”),但我已经检查了服务器端的所有内容。我的问题更多地与存储实现有关,例如localStorage或sessionStorage或Cookie。您不应该在浏览器中存储敏感数据。它不是真正的敏感数据(例如密码),只是界面的一些标志。它不会改变他们是什么,也不允许做什么,只会改变界面显示的内容。