【问题标题】:Sharing encrypted data between JavaScript and WebServer在 JavaScript 和 WebServer 之间共享加密数据
【发布时间】:2014-03-17 04:48:46
【问题描述】:
  1. 我有一个基于 REST API 的 Rails WebServer
  2. 我有一个 AngularJS 应用程序,它连接到这个 WebServer

在客户端加密登录名和密码并在服务器端解密这些凭据的最佳方法是什么?

【问题讨论】:

  • 您不能在 javascript 中执行此操作,因为 javascript 代码所做的一切都可以通过网络轻松检测到。如果你想发送加密的凭据,你应该使用 HTTPS。
  • 是的,我知道。最后,我们想使用 TSL 来保护我们的连接,但是现在,我们必须依赖标准 HTTP,所以我们想在 JS 中加密我们的数据并在服务器上解密它。我现在为此使用 RSA,但这不是最好的方法。

标签: ruby-on-rails angularjs security authentication


【解决方案1】:

正如 Geoff Genz 所说,最好的方法是使用 HTTPS 保护您的 Web 服务器,并确保您的登录操作只接受通过 HTTPS 的请求。配置您的 Angular 应用程序以向您的登录操作的 HTTPS URL 发出请求,所有加密都将得到无缝处理。您不必担心手动加密数据客户端然后解密服务器端。所有这些都将由使 HTTPS 工作的 TLS 协议处理。

【讨论】:

  • 但是目前我们的服务器不允许使用 TLS,只有当我们获得资金时,我们才能在安全服务器上运行。现在我们必须找到一些加密方式。
【解决方案2】:

如果您使用的是 RSA,您必须在浏览器中有密钥。除非通过不安全的 HTTP 连接,否则密钥无法到达浏览器。如果攻击者通过嗅探 HTTP 连接和您的 javascript 代码中的算法获得了密钥,那么您就没有保护任何东西,因为解密您的流量变得微不足道。

我建议在你的网络服务器前面放置一个 nginx 代理。您可以配置 nginx 进行 TLS 握手,并且您可以获得 Comodo SSL 证书,每年不到 15 美元。我自己在 Python 服务器前完成了这项工作,真的,这就是它的全部成本。

【讨论】:

    【解决方案3】:

    当我在客户端存储公共服务器密钥和在服务器端存储私有服务器密钥时,我刚刚决定使用http://travistidwell.com/jsencrypt/index.html

    JS 客户端加密所有发送到服务器的消息。

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 1970-01-01
      • 2015-08-14
      • 2019-10-19
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      相关资源
      最近更新 更多