如何确保客户端角应用程序的真正安全性

时间:2014-07-22 09:26:19

标签: javascript angularjs

让我们考虑以下情况:

我们有一个角度js前端,它使用内部API来获取和操作数据。

我们在/api/internal下公开此API。但是,我们不希望公开访问它,我们希望它只能由我们的前端访问。为确保这一点,我们仅允许使用请求标头中传递的令牌访问API:Authorization: Token token=xxx

问题在于我们如何为所有请求设置此令牌。我们可以采取这样的方法:

angular.module('myApp').run(function($http) {
  $http.defaults.headers.common.Authorization = 'Token token="xxx"'
})

问题当然是,这将在客户端,这意味着任何人将检查javascript和grep的TokenAuthorization字符串将能够找到令牌并使用它来访问数据。

当然还有其他安全措施,但只关注这个问题,我感兴趣的是如何以不同方式和更安全的方式处理它。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

  1. 您可以创建一个sessions表。
  2. 会话开始后(例如用户登录),将原始令牌值保存在sessions中并将其与某个加密值相关联。
  3. 将此加密值作为令牌返回给客户端。
  4. 每次都将此加密值发送到服务器。并从sessions表中访问与该加密值关联的原始令牌并进行处理。
  5. 会话结束后(例如用户注销),请从sessions表中删除该条目。
  6. API Token Safety in Angular applicationAuthentication with AngularJS, session management and security issues with REST Api WS以及How to secure my AngularJS and Web Api application列出的技术也可能有用

答案 1 :(得分:0)

如果您想使用令牌,但担心重复使用令牌(从而打开劫持),您可以使用nonce令牌。实际上,每个请求都会返回一个新标记(可能在标题中),每个标记只能使用一次。