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

时间:2012-09-18 14:52:43

标签: javascript authentication local-storage client-side

我有一个使用Backbone JS来呈现其视图的应用程序(以及其他类似模型等)。

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

这里首先担心的是安全问题。我只是在这里存储User.id,User.isAdmin等内容。此外,由于仅限于管理员的事情涉及服务器端参与,因此在客户端更改User.isAdmin = true将只为他们提供接口选项,但没有任何功能。

我知道使用Cookie进行此类操作可能是不受欢迎的,并且有充分的理由,因为Cookie会在所有HTTP请求之间来回发送,从而产生不必要的开销。

因此,我的问题是,我应该如何最好地告诉我的客户端应用程序有关用户身份验证数据。我正在使用jStorage(http://www.jstorage.info)进行localStorage访问,但它不使用SessionStorage。后者会比前者更合适吗?

1 个答案:

答案 0 :(得分:0)

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

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

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