使用Ruby安全地向网站发送密码

时间:2012-06-25 13:27:55

标签: ruby http authentication

Minecraft使用启动器来减少游戏盗窃:任何人都可以免费下载,但用户必须提供高级帐户的凭据才能更新游戏。我想为一个项目构建一个类似的启动器(在Ruby中),但我无法弄清楚如何安全地将密码发送到HTTP服务器(如果重要的话,用Sinatra编写)。显然,将它作为URL中的参数是一个非常糟糕的主意。

另外,我虽然以某种方式使用密码字段发送它,但我不知道它们是如何工作的(我通常不做HTTP的东西)。这仍有可能。

简短摘要:在Ruby中,我想通过HTTP请求将敏感信息发送到Ruby / Sinatra服务器。

感谢您阅读本文!

2 个答案:

答案 0 :(得分:2)

使用密码字段没有帮助。甚至没有通过POST发送。无论你多么努力地隐藏它们,它们都是用明文发送的 - 这就是http的本质。

你绝对应该使用TLS而不是https。 stdlib为此提供了Net::HTTP,但您可以使用任何支持https的http客户端。

如果此计划涉及金钱/价值,请不要满足于任何要求!发明自己的协议是

  • 方式更多工作(我承认TLS并不总是很容易设置,但工作量仍然少)
  • 在99.9%的情况下不安全
  • 在其余案件中完全破裂

不,老实说,发明安全协议可能是最困难的工作之一。所以要蹩脚并坚持主流(https),它最终会得到回报。

编辑:

您问TLS是否因为需要证书而需要花钱。这只是服务器端的一个问题,在单向认证的TLS中,只有服务器需要提供证书,因此连接到该服务器的客户端不必购买这样的证书。但是,如果您也操作服务器,那么您将需要这样的证书。如果您不想花钱,您可以查看托管,免费为您提供https。 Heroku提供了我所知道的免费服务,并且我认为还有其他提供商。

答案 1 :(得分:-1)

正如@Len所说,使用HTTPS,或者,如果不是一个选项,只用以下方法加密密码:

  • 至少,XOR加密
  • 也许是DES
  • 或RSA(总体矫枉过正,除非你的游戏值得电力黑客注意试图打破你的加密,因为RSA是银行和军事等级)

然后,您将在您的服务器上使用您的启动程序分发公共RSA密钥,并使用这些密钥加密密码(或使用这些密钥加密对称加密密钥)。