AngularJS - 如何使控制台或恶意攻击无法访问令牌?

时间:2015-07-12 15:52:32

标签: javascript angularjs security xss token

我想在客户端上存储令牌,但我担心客户端浏览器会受到恶意攻击。

在会话期间存储此变量的最佳方法是什么?

到目前为止,这是我的意思:

在'HeadersInterceptor'函数中创建一个独立的作用域,只有该函数才能访问它。

将此变量存储在客户端存储上的最佳方法是什么?

到目前为止,这是我的意思:

...的localStorage

我觉得我在这里正朝着正确的方向前进,但我很难为客户端存储这个变量。非常感谢任何见解!

2 个答案:

答案 0 :(得分:2)

你不能。

从JS应用程序可以访问的任何内容也可以从开发人员控制台访问,这只是客户端脚本的本质。

将其隐藏在私有变量或服务中,正如其他答案所暗示的那样,只不过是混淆 - 它会让它变得更加令人讨厌,但它仍然存在并且可用。

即使您发现一种方法使其无法从开发者控制台无法访问,本身,恶意用户仍然可以自己修改JS文件 - 这是一场失败的战斗。

答案 1 :(得分:-1)

我对此的看法:

  

在会话期间存储此变量的最佳方法是什么?

sessionStorage

  

将此变量存储在客户端存储上的最佳方法是什么?

的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根据需要访问它。