RESTful应用程序安全性

时间:2011-08-25 09:51:13

标签: http rest https cryptography restful-authentication

我编写了一个C ++应用程序框架,它使用RESTful API与服务器应用程序进行通信。客户端和服务器之间传递的数据当前使用的是(32位长)简单密码,在服务器和客户端都已知(硬编码)。

在我目前的方案中,客户端和服务器之间的数据传输是作为二进制编码数据完成的。数据是使用密码加密的压缩JSON格式字符串(如上所述)。

我知道这可能是最弱的安全形式。我想通过使用HTPPS以及其他一些机制来加强安全性,以便每个客户端都有一个不能伪造的唯一令牌 - 即使是任何可能碰巧正在窃听消息的人也是如此。这非常重要,因为敏感的个人和财务数据将在服务器和客户端之间传输,因此任何安全漏洞都可能被认为是致命的。

任何人都可以概述一个策略/方法(或最佳实践)来实现这样的安全性 - 包括,如果我必须做任何其他事情来使用HTTPS而不是HTTP - 偶然(可能看起来是一个愚蠢的问题),但是还有什么额外的在我上面描述的方案中,HTTPS通过HTTP提供安全性吗?

我特别感兴趣:

  1. RESTful身份验证/授权
  2. 安全地处理每个客户端 - 以便服务器可以识别试图“假装”成为另一个客户端的恶意客户端的尝试。例如,子应用程序的instanceA不能伪装成instanceB,例如。

2 个答案:

答案 0 :(得分:2)

首先关注合理的安全措施

我们广泛部署了一个应用程序(美国和欧洲),它依赖于几个简单的原则

  • 所有通信均通过HTTPS进行,以防止中间人攻击

  • 所有用户(或您的案例中的应用)都有一个用户名和密码 用于验证身份 - 验证是通过HTTPS

  • 经过验证的用户会获得一个有时间限制的会话密钥,该密钥会在到期时强制重新验证

  • 系统管理员可以随时撤消任何会话

  • 跟踪所有无效登录并将警报发送给系统管理员,以便我们可以看到正在进行的攻击。<​​/ p>


Restful Authentication

我们的应用程序有一个REST风格的API,远程用户界面和第三方(SAP / Excel ...)一样使用。 REST方面非常正交,但我们使用Ruby RESTful身份验证模块。关键的学习是会话是可以通过对/ sessions资源集的操作创建和销毁的资源。会话将客户端(用户或应用程序)映射到经过身份验证的会话。

可以找到关于RESTful身份验证背景的好文章here。我特别喜欢这个摘录...

  

身份验证是开发软件时最难的问题之一。因为如果你有一点错误,你的解决方案就不再安全了。你的声誉可能随之降低。那么为什么Web开发人员坚持开发自己的安全性呢?为什么不使用HTTP认证,这可能比大多数程序员自己开发更安全?

Stackoverflow中已有一些很好的资源。看一下here例如


实施HTTPS

您可能非常了解HTTPS需要什么

  • 证书 - 我们使用GoDaddy - 可怕的网站,但非常便宜和可靠。我们使用全球证书来涵盖整个域

  • 可以处理HTTPS的网络服务器 - 所有这些天,我们使用NGINX因为它快速,可靠且易于配置

  • 可以处理HTTPS连接的适当客户端库

答案 1 :(得分:0)

你们都有一个详细但一般的答案,让我详细说明你的具体情况:

  • 您不需要来自第三方的证书,您可以自己发行。
  • 在您使用服务器时,请为服务器制作证书以供客户验证。这对中间人的攻击很有帮助。
  • SSL的一个好处(HTTPS中的S)是用于密钥管理的既定工具,您不必重新发明轮子。 (你现在在哪里保存密码?)
  • 使用每个客户端部署的唯一证书,您可以放弃任何进一步的身份验证。
  • 如果您想添加一个因素(以及尝试使用其他人的密码登录的端点上的某个人的蜜罐),您可以添加HTTP Basic,它在HTTPS中非常安全。
  • 终止SSL连接的服务器可以访问证书的凭据详细信息。如果您使用专用代理,则需要将相关信息作为标题添加到请求中。