是否有一种方法可以在Ajax中安全地发送信息

Is there a way to securely send information in Ajax?

本文关键字:Ajax 安全 信息 方法 一种 是否      更新时间:2023-09-26

我目前正在开发一个基于HTML+JS的应用程序,几乎完全基于ajax连接(使用jQuery.ajax()调用来简化这个过程)。

我正在考虑不使用HTTPS(至少在这个时候)进行安全呼叫的最佳实践。我现在付不起证书的钱)。

在这一点上,我唯一关心的是注册和登录步骤。也许登录更容易一些。我想到发送用户名和时间戳,然后使用用户的密码对它们进行加密。因此,通过这样做,我不会发送任何密码(像OAuth一样保持秘密)。服务器应该检查用户,使用密码解密,并将接收到的时间戳与解密结果配对。服务器应该将nonce类数字保存到数据库中(以避免重复攻击),然后返回给用户另一个唯一id(用用户的密码加密)。此时,用户应该开始使用该密钥加密他的所有信息(可能还有另一个nonce)并将其发送到服务器。如有错误或漏处,请指正。 对我来说最大的问题是注册。我不能用常规密码加密信息,因为如果我在javascript中这样做,任何人都可以知道密码。如果我提供临时生成的密码进行加密,并将其从服务器发送到客户端,任何嗅探器都可以获得它并使用它来解密信息。

我知道HTTPS可以在这一点上拯救我的生命(也许这是唯一的解决方案),但在这一点上我不能使用它。

是否有其他解决方案,或者我应该等到我可以使用HTTPS?请记住,如果我能跳过等待,那就更好了。谢谢伴侣!

简短的回答:你不能没有HTTPS

更长的回答:如果你试图在没有HTTPS的情况下这样做,你会发现自己试图复制HTTPS设计的所有功能。您可以在某个点上达到,但相信您将成功实现HTTPS提供的1%是不现实的。您将获得的唯一好处是一个模糊的安全机制(通过模糊实现安全),对于非关键系统可能还可以,但在真正的关键情况下可能会惨败。

您可以创建自己的证书,然后像使用常规HTTP调用一样使用Ajax。唯一的缺点是用户将得到一个警告消息。

使用SSL证书是唯一的方法,如果你在javascript中加密它,任何人都可以读取代码并解密它。

http://www.startssl.com/

  • 在服务器上生成公钥/私钥对,以及随机生成的salt。
  • 将密钥对和salt附加到用户会话对象。
  • 向客户端代码发送公钥和盐。
  • 使用公钥和盐对AJAX请求进行加密

这不是一个简单的任务。您可能会发现,直接购买证书更便宜、更有效。

EDIT:这也意味着所有常规HTTP流量(HTML,图像,CSS等)都以明文方式发送。这可能是一个问题,因为它可能允许窃听者间接地知道用户在做什么。

我想你应该看看:

http://assl.sullof.com/assl/

项目描述如下:

aSSL是一个在MIT许可下发布的库,实现了类似SSL的技术,但没有HTTPS。

aSSL允许客户端使用RSA算法与服务器协商一个秘密的随机128位密钥。一旦连接建立,数据将使用AES算法发送和接收。

aSSL由一些Javascript文件和一个服务器端组件组成。因为我最近将协商算法从RC4更改为RSA,所以目前只有一个纯Javascript (ASP)服务器组件可用。一旦库通过测试阶段,我将尽快为主要的web语言(PHP, Java, Perl, Python, TKL等)进行移植。