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

Http RESTful应用程序安全 我编写了一个C++应用程序框架,它与REST API通信,与服务器应用程序通信。客户端和服务器之间传递的数据当前使用的是服务器和客户端中都已知(硬编码)的简单密码(32位长),http,rest,https,cryptography,restful-authentication,Http,Rest,Https,Cryptography,Restful Authentication,在我当前的方案中,客户端和服务器之间的数据传输是作为二进制编码的数据进行的。数据是一个压缩的JSON格式字符串,已使用密码加密(如上所述) 我知道这可能是最脆弱的安全形式。我想通过使用HTPPS以及其他一些机制来加强安全性,这样每个客户端都有一个唯一的令牌,即使是碰巧偷听消息的任何人也不能伪造。这一点非常重要,因为敏感的个人和财务数据将在服务器和客户端之间传输,因此任何安全漏洞都可能被认为是致命的 任何人都可以概述实现这种安全性的策略/方法(或最佳实践)吗?顺便说一句,包括如果我必须做其他事情来

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

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

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

我特别感兴趣的是:

  • RESTful身份验证/授权
  • 安全地处理每个客户机—以便服务器能够识别恶意客户机试图“假装”为另一个客户机的企图。例如,子应用程序的instanceA不能伪装成instanceB
  • 首先关注合理的安全措施 我们有一个广泛部署的应用程序(美国和欧洲),它依赖于几个简单的原则

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

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

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

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

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


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

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

    在开发软件时,身份验证是最困难的问题之一。因为如果你犯了一点错误,你的解决方案就不再安全了。你的名声也会随之下降。那么,为什么web开发人员坚持开发自己的安全性呢?为什么不使用HTTP身份验证呢?它可能比大多数程序员自己开发的安全得多

    Stackoverflow中已经有一些很好的资源。举个例子


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

    • 证书-我们使用GoDaddy-可怕的网站,但相当便宜和可靠。我们使用全球证书覆盖我们的整个领域

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

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


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

    • 您不需要来自第三方的证书,您可以自己颁发
    • 当你在它做一个证书为服务器以及客户端验证。这对中间人攻击是很好的。<李>
    • SSL(HTTPS中的S)的一个好处是建立了密钥管理工具,您无需重新发明轮子。(您现在将密码保存在客户端的何处?)
    • 使用每个客户端部署的唯一证书,您可以放弃任何进一步的身份验证
    • 如果您想再添加一个因素(以及端点处试图使用其他人的密码登录的人的蜜罐),您可以添加HTTP Basic,它在HTTPS中非常安全
    • 终止SSL连接的服务器可以访问证书的凭据详细信息。如果为此使用专用代理,则需要将相关信息作为头添加到请求中