我想在客户端上存储令牌,但我担心客户端浏览器会受到恶意攻击。
在会话期间存储此变量的最佳方法是什么?
到目前为止,这是我的意思:
在'HeadersInterceptor'函数中创建一个独立的作用域,只有该函数才能访问它。
将此变量存储在客户端存储上的最佳方法是什么?
到目前为止,这是我的意思:
...的localStorage
我觉得我在这里正朝着正确的方向前进,但我很难为客户端存储这个变量。非常感谢任何见解!
答案 0 :(得分:2)
你不能。
从JS应用程序可以访问的任何内容也可以从开发人员控制台访问,这只是客户端脚本的本质。
将其隐藏在私有变量或服务中,正如其他答案所暗示的那样,只不过是混淆 - 它会让它变得更加令人讨厌,但它仍然存在并且可用。
即使您发现一种方法使其无法从开发者控制台无法访问,本身,恶意用户仍然可以自己修改JS文件 - 这是一场失败的战斗。
答案 1 :(得分:-1)
我对此的看法:
在会话期间存储此变量的最佳方法是什么?
将此变量存储在客户端存储上的最佳方法是什么?
的sessionStorage
但是如果你根本不想让它可以访问,甚至从控制台(sessionStorage和localStorage都可以从控制台访问),我认为你应该放弃将它存储在LS中并简单地在内存中保存一个引用。将令牌私密地保存在一个闭包中并通过服务访问它。像这样:
app.factory('tokenSvc', function(){
var token;
return {
setToken: function(_token) {
token = _token;
},
getToken: function() {
return token;
}
};
});
由于Angular是一个SPA框架,只要您的应用程序处于活动状态,token
引用就会持续存在。所以也许您可以在$ http拦截器函数中设置令牌,然后通过getToken
根据需要访问它。