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

Posted

技术标签:

【中文标题】如何确保客户端角度应用程序中的真正安全性【英文标题】:How to ensure real security in a client side angular app 【发布时间】:2014-09-13 01:12:43 【问题描述】:

让我们考虑以下场景:

我们有一个 Angular 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 字符串的人都能够找到令牌并使用它来访问数据。

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

【问题讨论】:

要克服这类问题.. 你需要一个中间件服务器。它不会从前端直接与 API 通信,而是调用中间件服务器,该服务器会将请求传输到您的 api。这将使您的 api 更加安全。如果您采用当前的方法,则可以使其非常安全,如果您的 api 服务器仅接受来自一个 IP 的请求,那将是您的前端服务器 ip。因此,如果有人消耗了您的令牌,那么它也将毫无用处。因为您的 API 服务器只响应您的前端服务器。希望这会有所帮助.. 【参考方案1】:

您可以尝试以下方法:

    您可以创建一个sessions 表。 一旦会话开始(例如用户登录),将原始令牌值保存在sessions 中并将其与某个加密值相关联。 将此加密值作为令牌返回给客户端。 每次都将此加密值发送到服务器。并从sessions 表中访问与该加密值关联的原始令牌并进行处理。 一旦会话结束(例如用户注销),从sessions 表中删除条目。

API Token Safety in Angular application 和 Authentication with AngularJS, session management and security issues with REST Api WS 和 How to secure my AngularJS and Web Api application 中列出的技术也可能有用

【讨论】:

【参考方案2】:

如果您想使用令牌,但担心令牌被重复使用(因此容易被劫持),您可以使用nonce 令牌。实际上,每个请求都会返回一个新的令牌(可能在标头中),并且每个令牌只能使用一次。

【讨论】:

以上是关于如何确保客户端角度应用程序中的真正安全性的主要内容,如果未能解决你的问题,请参考以下文章

使用 ORM 时如何确保域完整性

我们如何确保 Angular.js 的安全性

如何使用 TLS/SSL 确保 WebSocket 连接的安全

如何使用 TLS/SSL 确保 WebSocket 连接的安全

Spring安全和角度

WCF - CMS 中的 Web 控制客户端安全性