我目前正在开发基于HTML + JS的应用程序,几乎完全基于ajax连接(使用jQuery.ajax()
调用来简化流程)。
我正在考虑在不使用HTTPS的情况下进行安全通话的最佳做法(至少目前是这样。我现在买不起证书)。
此时,我唯一关心的是注册和登录步骤。也许登录更容易一些。我想到发送用户名和时间戳,然后使用用户密码加密它们。因此,通过这样做,我不会发送任何密码(像在OAuth中一样保密)。服务器应检查用户,使用密码解密并将收到的时间戳与解密结果配对。服务器应将 nonce 类似的数字保存到数据库中(以避免重复攻击),然后将另一个唯一ID(使用用户密码加密)返回给用户。此时,用户应该开始使用该密钥加密他的所有信息(可能还有另一个nonce)并将其发送到服务器。如果您发现任何错误或泄漏,请纠正我。
对我来说最大的问题是注册。我不能用常规密码加密信息,因为如果我在javascript中这样做,任何人都可以知道密码。如果我提供临时生成的密码来加密并将其从服务器发送到客户端,那么任何嗅探器都可以获取它并用于解密信息。
我知道HTTPS可以挽救我的生命(也许这是唯一的解决方案),但此时我无法使用它。
还有其他解决方案,还是应该等到我可以使用HTTPS?请记住,如果我可以跳过等待,那就更好了。谢谢伙伴们!
答案 0 :(得分:4)
简短回答:如果没有HTTPS
,就无法做到更长的答案:如果您尝试在没有HTTPS的情况下执行此操作,您将发现自己尝试重现HTTPS旨在执行的所有操作。您可以在某个时刻达成目标,但相信您将成功实现HTTPS提供的1%是不切实际的。您将获得的唯一好处是一个模糊的安全机制(通过默默无闻的安全性),对于非关键系统可能没问题,但在真正的危急情况下可能会失败。
您可以创建自己的证书,然后使用与常规HTTP调用相同的方式使用Ajax。唯一的缺点是用户会收到警告信息。
答案 1 :(得分:3)
使用SSL证书是唯一真正的方法,如果你在javascript中加密它,任何人都可以读取代码并解密它。
答案 2 :(得分:2)
这不是一项微不足道的任务。您可能会发现购买证书更便宜,更有效。
编辑:这也意味着所有常规HTTP流量(HTML,图像,CSS等)都是以明文形式发送的。这可能是一个问题,因为它可能允许窃听者间接地弄清楚用户正在做什么。
答案 3 :(得分:0)
我想你应该看看:
以下是项目的描述:
aSSL是一个在MIT License下分发的库,它实现了一种类似于没有HTTPS的SSL的技术。
aSSL使客户端能够使用RSA算法与服务器协商秘密随机128位密钥。建立连接后,将使用AES算法发送和接收数据。
aSSL由一些Javascript文件和服务器端组件组成。因为我最近将协商算法从RC4更改为RSA,所以目前只有一个纯Javascript(ASP)服务器组件可用。一旦库通过测试阶段,我将尽快为主要的Web语言(PHP,Java,Perl,Python,TKL等)进行移植。