我不确定这是否可行,但是有没有一种方法可以在仅使用 javascript 的同时确保跨多个页面的用户信息安全?
我从三个单独的 API 请求中恢复了一组预定义的详细信息,初始调用通过 POST 将用户凭据发送到 login_api 并返回一小组数据(OAuth2 令牌、用户出生姓名等),随后的调用触发成功,对于通过 GET 调用的 2 个产品通道,这些请求返回每个通道的产品列表,该列表被认为是该用户有权查看的内容。
我在设置安全用户身份验证和跨多页网站记住数据方面没有丰富的经验,所以我想确保我采取了正确的方法。
使用下面的函数,我可以在使用该数据的函数内部创建 _private 变量。
所有记住的数据都在 XHR 响应中应用到 cookie 存储区域,它永远不会离开请求函数的范围。
从那时起,所有数据都通过 cookie 检索,在单个函数范围内使用,永远不会离开使用它的函数的范围。每次需要数据时,它都会从 cookie 中重新获取。我不确定 cookie 的安全性,我曾讨论过在每次恢复数据时清除 cookie 并在函数完成时重新应用更新的值,但认为这太过分了。
如果页面加载时不存在任何相关 cookie 数据,它们将被重定向到登录页面,并且所有相关 cookie 数据(如果存在)将被删除。
有什么方法可以改进在多个页面中保留 OAuth2 令牌和少量用户详细信息,而不会仅使用 javascript 泄漏用户信息?
注意 这是一个相当古老的内部网站,为了让我们使用 ES5 及更低版本的团队熟悉,它不再仅供内部使用。
var config = Object.create(null);
config.expire_item = 30; // minutes
function dataref() {
// setup objects to store details in
var output;
output = Object.create(null);
output.access = Object.create(null);
output.licensed = Object.create(null);
output.token = "_token";
// apply predefined names as object values
// cookies in this namespace holds user name
output.fname = "_fname";
// cookies in this namespace store true/false flags
output.has_access.ces = "ces_license";
output.has_access.ezg = "ezg_license";
// cookies in this namespace hold pipe & comma delimited product lists
output.licensed_for.ces = 'ces_products';
output.licensed_for.ezg = 'ezg_products';
// ...etc.
return function () {
// return object with predefined names for cookies
return output;
}();
}
function apply_userdata(fn) {
// get predefined cookie names
var _data = dataref();
return function () {
// apply function to all namespaces
fn(_data.token);
fn(_data.fname);
fn(_data.access.ces);
fn(_data.access.ezg);
fn(_data.licensed.ces);
fn(_data.licensed.ezg);
}();
}
function resetCookieExpire(name) {
// updates cookie expiration period.
return setCookie(name, getCookie(name), option.expire_item);
}
function getUserSensativeData(name) {
// retrieve cookie value
return getCookie(name)
}
扬帆大鱼
相关分类