在不使用SSL的情况下防止数据包嗅探的最佳方法是什么?


What's the best way to prevent packet sniffing without using SSL?

当我的浏览器将我的密码发送到服务器(http)时,我想保护我博客上的登录页面,因为我不想让任何人窃取它。

你会怎么做?

据我所知,从生产角度来看,唯一真正的方法是使用javascript加密表单中发送的数据,然后在另一端解密。

似乎有几个JS类用于此目的,例如http://www.jcryption.org/jCryption使用RSA的公钥算法进行加密。

那么第三方数据包嗅探器必须知道解密密钥才能对数据进行任何操作。

我建议所有的登录都使用SSL !就我个人而言,我所有的流量都是通过VPN隧道传输的,所以我知道在公共场所使用VPN会稍微安全一些。

您只能允许通过SSH隧道使用登录页面;)然而,我认为SSL的负担要少得多。

javascript的建议,我不知道我应该怎么想那些。密钥必须在客户机和服务器之间共享,因此这也需要安全的密钥交换。这一点都不微不足道,我怀疑只有很少几个真正好的库可以做到这一点。用javascript"加密"某些东西的基本建议肯定会失败。

使用JS执行RSA。在发送到服务器之前加密了。然后在到达服务器时解密

如果你问我,我不会使用非ssl加密登录。一旦涉及到会话,我就切换到SSL,因为没有SSL的会话窃取太容易了。此外,SSL允许我使用Basic-Auth保护我的页面,所以我甚至不需要会话。

所以也许最好是考虑把你的博客完全切换到SSL。注意,要在服务器上使用SSL,您只需要一个SSL证书。有一家公司提供每年0美元的free ssl certificate。还要注意,Google和所有主要的搜索引擎都可以毫无困难地处理https页面。

我跳过了关于如何在不安全的行上使用JavaScript和AJAX实现自己的安全密码方案的1000行回答,因为这很难实现。

两个选项如何安全登录没有JavaScript没有SSL我想到了:

  • 有一个便宜的one time password USB设备在那里。你只要把它插入USB接口,按下按钮,它就会创建一个OTP,你就可以了。因为它是一个OTP,所以它只在一次有效,所以没有重播,当它被嗅探时没有问题。

  • 另一件事是OpenID这是在这里使用的stackoverflow。OpenID在服务器和客户端之间不需要SSL。请注意,上面的USB令牌也已经启用了OpenID。

两种方式都提供了大量的免费库来使用PHP或其他语言实现它。这当然比在不安全的线路上自己创建一个设计合理且安全的密码方案要容易得多。

然而,有一个重要的警告:

如果您在不安全的线路上使用会话,并且登录通常使用会话,请确保至少通过所看到的IP保护会话。这必须在服务器端实现。这样,如果有人窃取了会话Cookie,则会话不能(ab)被使用,前提是窃贼不与您共享同一wLAN(或计算机)。