【问题标题】:Storing auth data on the client side在客户端存储身份验证数据
【发布时间】:2012-09-18 23:05:58
【问题描述】:

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

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

当然,首先要担心的是安全问题。我只是在此处真正存储诸如 User.id、User.isAdmin 等内容。此外,由于仅限于管理员的事情将涉及服务器端的参与,因此在客户端更改 User.isAdmin = true 只会为他们提供界面选项,但没有任何权力。

我知道在这种事情上使用 Cookie 可能不受欢迎,并且有充分的理由,因为 Cookie 在所有 HTTP 请求中来回发送会产生不必要的开销。

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

【问题讨论】:

    标签: javascript authentication local-storage client-side


    【解决方案1】:

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

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

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

    【讨论】:

    • 我应该在我的问题中澄清(“在客户端更改 User.isAdmin = true 只会给他们接口选项,但没有任何权力”)但我已经在检查所有内容无论如何服务器端。我的问题与存储实现更相关,例如localStorage 或 sessionStorage 或 Cookies。
    • 你不应该在浏览器中存储敏感数据。
    • 这不是真正的敏感数据(例如密码),只是接口的一些标志。它不会改变他们是什么和不允许做什么,只是界面显示的内容。
    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多