如何通过在没有HTTPS的使用Javascript HTTP安全发送密码?如何通过在没有HTTPS的

2019-05-13 02:56发布

非常基本的问题,所有的开发者面临:当用户提交表单,密码是通过网络发送的,它必须得到保护。 我开发的网站没有HTTPS。 也不对业主想购买SSL证书,也不是他感兴趣的是自签名。 所以我要保护提交表单时使用JavaScript通过HTTP发送的密码。

为了急于downvoters: 如何安全地发送密码通过HTTP? 不给任何明智的解决办法,我在另一种情况。

如果我使用MD5,一个可以扭转这一密码字符串。 怎么样现时/ HMAC? 任何可用的Javascript库是什么? 或者你有任何建议/提示来解决? 提前致谢!

Answer 1:

有没有办法安全地发送一个密码,用户可以验证不使用SSL。

当然,你可以写一些JavaScript,这将使密码散列通或公共密钥加密确保对过度的有线传输。 但是,用户如何能肯定的是,JavaScript的本身并没有被一个人在这方面的中间人则达到他们之前,发送密码给攻击者,而不是网站,甚至只是妥协的安全篡改算法? 唯一的办法是让他们成为专业程序员,让他们检查你的页面和文字的每一行,以确保它是输入密码前犹太教。 这不是一个现实的情况。

如果你想要的密码是安全的人在这方面的中间人攻击,你必须购买一个SSL证书。 有没有其他办法。 习惯它。

如果我使用MD5,一个可以扭转这一密码字符串。

不......不平凡至少。 虽然MD5有针对它的攻击,这是一个散列算法,从而unreversable。 你将不得不暴力破解它。

但同样,一个人在这方面的中间人攻击者不需要看你的MD5s。 他可以简单地破坏你的JavaScript发送用户做出MD5s。



Answer 2:

这里的解决方案是不是在所有发送密码。 使用挑战/响应。

在原来的形式包括随机文本用钥匙沿大块。 存储在基于服务器密钥对会话的原始随机文本。 当客户端提交表单,用JS散列随机文本和密码一起。 然后发送用户名,密钥和散列随机文本到服务器。 不发送密码。 在服务器上,用钥匙将查找原来的随机文本,与存储的密码执行相同的哈希操作。 如果服务器散列值的散列客户端值相匹配,那么你知道客户端输入了正确的密码,而不用发送密码到服务器。

密码是否正确与否,过期的密钥和随机文本因此每个都是一次性使用的。



Answer 3:

如果你真的想深入了解这一点,看看Diffie-Hellman密钥交换这是为了“让双方有互相的先验知识,共同建立一个共享密钥通过不安全的通信信道”

我不是一个加密专家了,所以我不完全知道它是否真的安全,如果攻击者在客户端(JavaScript源代码)和传输机制(数据包嗅探器)



Answer 4:

您可以使用JavaScript实现RSA发送前对密码进行加密。 (这里是一个例子RSA在Javascript中 。)

但我相信这二者之一,使用哈希函数将很容易受到重放攻击 。 所以,要小心。



Answer 5:

不幸的是就没有办法保证一个非加密的请求的安全性。 任何可以访问你的JavaScript将只能够逆向工程它/乱动它,任何人只要有一个数据包嗅探器就可以观看未加密的流量。 这两个事实一起的意思是:

没有SSL? 没有安全。



Answer 6:

你有会在清除任何传输; 即无SSL您的重要信息将被暴露。 这是值得讨论与网站所有者这一点。 换句话说,这是最好采取增强您的数据传输必要的措施,而SSL是一个你可以采取基本的,廉价的步骤。



Answer 7:

我不认为这里的问题是技术,而是你怎么解释SSL的重要性。 凭借可靠的阅读材料提供给他们,我敢肯定有很多在网上。



Answer 8:

该解决方案需要客户端能够加密使用只有在客户端服务器私有密钥的密码。

SSL通过要求服务器和客户端的网页浏览器有自己的非对称公钥/私钥对,他们用它来加密并发送它们之间的随机会话密钥实现这一目的。 谈话的其余部分则使用了安全的会话密钥。

所以你问如何解决同样的问题SSL,而不必是已知唯一的客户端和服务器密钥的利益。 我不是专家,但看起来这不能做,或者至少不容易。



Answer 9:

如果您没有获得SSL,MD5应足以防止密码的偶然发现(如网络日志文件或东西)。 还有什么是浪费时间。 只要确保应用程序不授予访问敏感信息(如信用卡号码,病历等)。

与其他人一样评论者认为,严重的攻击者将可以打破任何类型的安全页面上。 即使SSL是一个小障碍,因为大多数用户使用容易猜测的密码,到处重复使用相同的密码,会向任何人询问,或者被欺骗,被复制的页面或“高科技放弃自己的密码给他们的密码支持”电话。



Answer 10:

- 英语 - 我想的东西,但我不知道它是否能真正安全。 如果你可以把你的形式,一个PHP文件,那么你就可以创建创建基于时间或别的东西串的algoritm,然后把这个字符串在你的HTML。

当用户输入一个密码输入字段中输入密码,当你调试它,你canot看到由用户键入的值,所以通过邮寄之前发送的信息或获得,您可以使用密码的用户以提示加密的字符串previosly加密生成的,然后,刚刚发insted的用户键入的密码。

通过这种方式,攻击者不拥有所有的js代码里面,所以他们需要发现你创建对其进行解密algoritm。

这只是一个想法,所以如果你能告诉我怎么这不可能是安全的,我将不胜感激。

- 西班牙 - 我只是想的东西,可以发球,但如果它确实是一个肯定的事。 通过PHP可以生成一个算法来创建基于时间戳或其他什么东西的字符串,然后把这个字符串转换成HTML中。

需要注意的是,当有人类型的字段输入型密码的密码,调试无法看到价值单击用户(如果没有有一种方法,但我没有进一步调查),所以我们可以使用密码用户键入作为关键字来了以前用PHP生成,通过在JS的算法的装置的文本字符串进行加密。 这就像加密加密。 那么我们将发送不会被敲入密码,如果不是后者产生的字符串。

寻找一个柜台,我能想到的唯一的事情是,攻击者将不得不花费大量的时间,试图找到,该算法中,我们通过PHP创建并解密,最后一个字符串,或者你必须破解服务器访问PHP和获得该算法。

这只是一个想法,所以如果你能告诉我如何不能确定,他们是感激。



Answer 11:

如前所述,这一切都不是针对服务器欺骗安全的,因为这需要信任客户端JavaScript的能力。 但是,如果我们确保服务器不能被欺骗(签名的证书,哈希签约免疫长度扩展等),但不是连接不受窃听,这里就是我想实现它。

我认为最安全的方式是不是存储H( 密码 ),其中H是你选择的哈希函数,存储G ^ H( ),即使用密码作为私钥的Diffie-Hellman密钥交换。 (你也应该使用一个随机g下不同的用户,太-它成为你的盐),然后验证,您生成一个随机数B,向用户发送G ^ b和计算(G ^ H( ))^湾 用户不需要知道克-他们只需要计算(G ^ B)^ H( 密码 )=(G ^ H( 密码 ))^ B。 现在你有一个数字,双方都知道当且仅当用户输入正确的密码,并构建基于知道正确的号码质询-响应零知识证明是微不足道的,而作为服务器的“私钥”的随机数,使接近免疫重放攻击。



文章来源: How to send password securely via HTTP using Javascript in absence of HTTPS?