http - RESTful 应用安全

标签 http rest https cryptography restful-authentication

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

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

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

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

我特别感兴趣:

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

最佳答案

首先关注合理的安全措施

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

  • 所有通信都通过 HTTPS 以防止中间人攻击

  • 所有用户(或您的应用程序)都有一个用户名和密码 用于验证身份——验证通过 HTTPS

  • 经过验证的用户会获得一个限时的 session key ,该 key 在到期时强制重新验证

  • 系统管理员可以随时撤销任何 session

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


Restful 身份验证

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

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

Authentication is one of the hardest issues when developing software. Because if you got even one bit wrong, your solution is no longer secure. And your reputation may go down with it. So why do web developers insist on developing their own security? Why not use HTTP authentication which is probably far more secure than most programmers will ever be able to develop themselves?

Stackoverflow 中已有一些不错的资源。看看here例如


实现 HTTPS

您可能非常清楚 HTTPS 需要什么

  • 证书 - 我们使用 GoDaddy - 糟糕的网站,但非常便宜且可靠。我们使用全局证书来覆盖我们的整个领域

  • 一个可以处理 HTTPS 的网络服务器 - 现在我们都使用 NGINX,因为它快速、可靠且易于配置

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

关于http - RESTful 应用安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7188305/

相关文章:

ssl - 无法通过 Fiddler2 执行 HTTPS 本地隧道 - 证书问题

php - 如何在 Guzzle 中设置引用 header

javascript - 通过标记或 JS 强制下载

java - 使用 REST 调用将本地对象的范围与服务器对象进行匹配

rest - wso2esb - 来自 HTTP 请求的冗余 header

java - SSL 证书验证 : javax.net.ssl.SSLHandshakeException

ssl - SWF(使用 URLLoader)可以访问 HTTPS 网络服务吗?

HTTP 推送到 Unix 主机

html - Apache不允许加载除index.html之外的其他文件

api - REST api 的语义版本控制?