首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多服务器间安全的RESTful api通信

多服务器间安全的RESTful api通信
EN

Security用户
提问于 2018-02-06 22:18:23
回答 1查看 3K关注 0票数 3

目前,我有以下设计:

  • 带有REST的中央云托管服务器
  • 多个远程服务器,每个服务器都有一个REST

数据定期从远程服务器发送到中央服务器。

命令以POST的形式从中央服务器向单个远程服务器发出,以运行在远程服务器上的REST。

我很担心安全问题。最重要的是防止向远程服务器发出未经授权的命令。

目前,我正在使用基于令牌的身份验证。每个远程服务器都有一个令牌,由中央服务器发出,该令牌存储在远程服务器的文件系统上的配置文件中。此令牌在来自远程服务器的POST请求的授权头中传递。

沟通的另一个方向也是类似的。每个远程服务器为中央服务器生成一个令牌,该令牌存储在与中央云服务器相同的网络中的关系数据库中。

我对这个设计的看法是:

  • 如果数据库被破坏,攻击者可以向远程设备发出命令--我实际上是将密码以明文形式存储在db中。
  • 如果远程设备的文件系统受到威胁,攻击者将访问令牌。

我可以用什么方法改进这个设计?从中央云服务器到远程设备的通信不需要是REST。我需要的是两台服务器之间的双向握手。如何使用REST实现这一点?

一些注意事项:

  • 两个rest apis都是通过HTTPS提供的。
  • 远程设备常常会在一段时间内失去互联网连接。
  • 这些遥控装置有可能被实际偷走。

我考虑过的一些事情:

  • 我可以将所有服务器连接到中央托管数据库,并将其用于通信。这似乎不太理想,因为这似乎是将这些远程设备直接连接到数据库的安全风险。此外,远程服务器经常失去连接性。
  • 限制对远程服务器的访问权限为包括中央远程服务器在内的IP地址白名单。
EN

回答 1

Security用户

回答已采纳

发布于 2018-02-07 02:08:13

因为您主要关注的是程序的安全性(即防止有人向您的客户发出命令),所以您还必须识别您的威胁模型。例如,如果您向程序发送命令以解锁您的前门,则您设计应用程序的方法将与仅仅发送无意义的数据(如"hello world!“)的方法大不相同。

一旦定义了密码,您就可以决定是否应该散列数据库中的密码,并将密钥锁定在安全的或纯文本密码中,这对于不重要的数据可能有效。我将尝试与您的应用程序交谈,尽管不知道每一个细节。

您已经在使用SSL/TLS,所以这是一个很好的开始。您已经实现了一种身份验证形式,客户端可以通过这种方式向服务器证明它们是合法的。您拥有对主机的物理控制,所以我假设没有人能够获得物理访问。如果您有静态IP,当然,可以抛出一个白名单和一个可能的防火墙来限制某些http方法(GET,POST)。您可能会考虑使用诸如Nginx这样的前端代理在服务器上完成所有这些工作。我强烈建议您不要允许客户端干净地切断到数据库的连接。只允许服务器连接到数据库。您提到您正在数据库中存储密码,为什么不使用散列/盐分呢?这也取决于你的威胁模型。

您提到客户端计算机在您的物理访问范围内,但可能被偷。如果攻击者具有对某个盒子的物理访问权限,则所有投注都取消。你在这里的最佳选择是尽快识别出一个客户被破坏了。您已经在使用令牌了,为什么不使用到期时间呢?

最后,从客户端发送到服务器的任何数据都必须、必须、必须进行消毒和检查。如果您知道数据是什么样子,请设置一个模板和接收到的与其不匹配的数据,请拒绝它。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/179267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档