基于Javascript的应用程序中的安全性-刷新用户哈希

Security in a Javascript based app -refreshing a users hash

本文关键字:刷新 用户 哈希 Javascript 应用程序 基于 安全性      更新时间:2023-09-26

我正在使用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请求吗?这将如何与我的应用程序中的其他beforeSends发生冲突?

基本上,在客户端,除了hash之外,不应该有任何东西。在服务器端,该散列必须与它所属的用户、过期时间以及您需要的任何其他信息相关联。

将此哈希与每个请求一起发送,并在服务器端验证它。当它过期时,您必须发送(服务器)适当的标头,如401-Unauthorized。客户端必须理解该响应,并尝试将哈希交换为新的哈希。最后,当客户端获得新的有效散列时,它可以继续发送请求。

您不应该在客户端检查过期时间,此作业适用于服务器。

谢谢。