【问题标题】:Security in a Javascript based app -refreshing a users hash基于 Javascript 的应用程序中的安全性 - 刷新用户哈希
【发布时间】:2013-07-04 19:34:24
【问题描述】:

我正在使用 HTML/CSS/JS 开发一个混合移动应用程序,我正在检查登录信息的安全性,我设置的系统会在用户登录后创建一个哈希,这个哈希有时间限制并且通过 localStorage 设置

本质上,我会有类似这样的本地存储:

hash
5f4a09cfec2a6d8f306eecb3844e33e9
hash_expiration
1373012945
password
*encryted user password*

这个哈希被发送到我的服务器以在我所有的 AJAX 请求的标头中进行验证(伴随着用于数据库匹配的用户 ID)

我主要是打开这个主题来讨论如何处理重新创建哈希键的最佳实践,我需要找出一种方法来刷新用户哈希键。

考虑到我在 AJAX 和 JS 方面的经验仍然相当有限,我考虑过使用 AJAX 设置来检查新哈希,如下所示:

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        var time = new Date().getTime(); //unix time
        var hash_time = localStorage.getItem("hash_expiration");
        if(time>hash_time){
            //ajax request to fetch new hash, async: false to make sure this completes before continuing with other AJAX calls
        }
    }
});

我会发送用户 ID 和他的加密密码来验证他并返回一个新的哈希值。

我应该在 ajaxSetup 的 beforeSend 中发送 AJAX 请求吗?这将如何与我的应用程序中的其他 beforeSend 冲突?

【问题讨论】:

    标签: javascript jquery cordova hybrid-mobile-app


    【解决方案1】:

    基本上在客户端你不应该有任何东西,除了哈希。在服务器端,此哈希必须与它所属的用户、过期时间以及您需要的任何其他内容相关联。

    在每个请求中发送此哈希,并在服务器端对其进行验证。当它过期时,您必须发送(服务器)适当的标头,例如 401 - 未经授权。客户必须了解该响应并尝试将哈希交换为新的。最后,当客户端获得新的有效哈希时,它可以继续发送请求。

    ...而且你不应该在客户端检查过期时间,这个作业是服务器的。

    谢谢。

    【讨论】:

    • 我需要监听所有 ajax 请求并检查 401 - 未经授权,如果我的请求得到 401 - 未经授权,我需要发送一个新哈希的新请求,同时我的用户得到一个由于 401 导致的错误 - 未经授权。嗯..
    • 这个过程必须在幕后进行,用户不应该看到错误。不要忘记 - 浏览器控制台仅适用于您 - 开发人员。
    • 我的意思是,想象一个用户点击一个页面,我检查了哈希值,它是错误的,用户需要一个新的哈希值 - 所以我发送一个新哈希值的请求,但是用户已经点击了该页面,但由于他的哈希在点击时无效 - 我不允许他进入。
    • 1.用户点击链接 2. 服务器收到哈希(例如来自 cookie) 3. 服务器检查哈希 4. 如果哈希过期,尝试更新它 5. 如果更新失败 - 重定向到登录页面 6. 如果更新成功 - 继续页面渲染
    猜你喜欢
    • 2014-04-30
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多