SSL 是从远程到网络服务器交换信息的唯一途径吗?

Is SSL the only way to go for the exchange of information from a remote to a webserver?

我是独立​​游戏开发团队的一员,我们正在使用 Unity (C#) 开发一个项目。 我在后端使用 Drupal (PHP/MySQL),我想从数据库中检索数据到我们的软件。

因此,例如,如果我希望用户通过 Drupal 的身份验证(发送密码的服务器端散列)登录,则用户首先需要通过 unity WWWForm 或 c# HttpRequest(客户端)提交他的用户名和密码。

如果我研究得当,可以通过三种方式安全地发送数据(如有错误请指正):

  1. 实现自己的密码encryption/decryption(在服务器端解密后使用 Drupal 的密码散列)
  2. 在 c#(客户端)中实现 drupal 的哈希方法
  3. 购买 SSL 证书并使用 HTTPS

嗅探HTTP连接或者反编译软件是可以的,对吧?那么可能性 1) 和 2) 是否有意义?这两种方法中的一种是否足够安全?

SSL 是我们唯一的出路吗?

这取决于您想要的安全程度,以及您认为攻击者会在多大程度上拦截密码。例如,如果您通过 JavaScript 使用客户端密码散列,理论上可能 JavaScript 库在传送给用户时被拦截,并进行修改,以便发送明文副本密码。然后可以在将其发送到您的服务器时将其拦截。但是,由于您正在开发电脑游戏,所以这不太可能发生。

具有真实证书的 SSL 可以在某种程度上防止这种情况发生,因为理论上 MITM(中间人)攻击不可能嗅探数据,更不用说修改沿线路传输的数据。为此,他们需要有一份您的私人服务器密钥的副本,方法是从您的服务器窃取它或 stealing/obtaining 从证书颁发机构那里窃取它。虽然这并非不可能,但极不可能发生。

最低安全性的 SSL 证书现在非常便宜,通常会为您节省大量考虑如何实现安全性的工作。我会选择这个选项。

  1. Implement own password encryption/decryption (use Drupal's password hashing after server side decryption)
  2. Implement drupal's hashing method(s) in c# (client)

这些方法的问题是客户端散列版本实际上变成了密码。因此,如果 MITM 获取了散列版本,他们可以简单地重放它以登录。

  1. Buy SSL certificate and go with HTTPS

当然。除了加密之外,HTTPS 还可以确保客户端正在与您的服务器通信,并且没有经过中间人攻击,它还可以防止重放攻击(攻击者从他们自己的连接中重新创建登录请求,然后根据响应采取行动).