Javascript 如何从客户端安全地发送密码?

Javascript 如何从客户端安全地发送密码?,javascript,c#,api,rest,security,Javascript,C#,Api,Rest,Security,我正在努力使我的RESTAPI更加安全。目前,我正在使用CryptoJs.SHA256对angular应用程序中的密码进行哈希运算,然后将其发送到我的C#后端。但我意识到最好在服务器端散列密码。那么,我如何发送一个只有服务器才能读取的密码呢?我将添加SSL,但我知道HTTPS也是可破坏的。还有其他解决办法吗 感谢Bruce Schneier所说的“任何人都可以设计出他自己无法破解的密码。这就是为什么你应该一致地不信任业余密码学,为什么你应该只使用经过广泛密码分析的已发布算法。” 虽然没有什么是1

我正在努力使我的RESTAPI更加安全。目前,我正在使用CryptoJs.SHA256对angular应用程序中的密码进行哈希运算,然后将其发送到我的C#后端。但我意识到最好在服务器端散列密码。那么,我如何发送一个只有服务器才能读取的密码呢?我将添加SSL,但我知道HTTPS也是可破坏的。还有其他解决办法吗

感谢Bruce Schneier所说的

“任何人都可以设计出他自己无法破解的密码。这就是为什么你应该一致地不信任业余密码学,为什么你应该只使用经过广泛密码分析的已发布算法。”

虽然没有什么是100%牢不可破的,破坏HTTPS比破坏JavaScript自制的安全方案要难得多。考虑这一点:如果您通过不可信的HTTP或HTTPS与无效证书连接来服务您的超级安全JS,那么什么阻止攻击者替换一个损坏的版本,这将绕过所有的JS安全性?没什么

现代浏览器正在竭尽全力防止HTTPS被破坏(使用HST等);因此,依赖HTTPS(正确使用时可以提供实际的安全性——“忽略所有红色大错误”是打破它的一种简单方法)比依赖JS over HTTP(只提供安全感而没有实际的安全机会)安全得多

进一步阅读:


关于这个主题的来源很多,但实际上很少有人分析过。一般来说,最信任托马斯·潘宁的指导。我也强烈推荐。

这并不是你问题的完整答案,但我会从使用KDF(密钥派生函数)开始,而不仅仅是散列你的秘密。您可以查看的一些KDF库包括:

  • PBKDF2
  • bcrypt
  • 刺耳

客户端有什么功能?Javascript程序?ASP.NET页面?客户?请添加更多信息,如您如何联系服务器。如果HTTPS被破坏,则您发送到客户端的任何JS实现也不可信(因为攻击者可以替换它)。只需使用HTTPS(正确地说,这一切都不是“忽略大红色警告”的胡说八道)就可以了。例如,见: