我希望使用JavaScript在用户登录时(使用Ajax),对其密码和用户名进行加密。我知道有几个基于JavaScript的非对称加密库。这是一种可行的策略,以安全地传输密码吗?
我知道SSL存在,但这不是问题的关键。
我知道SSL存在,但这不是问题的关键。
不行。攻击者获取密码或加密后的密码都不会有任何区别,因为它们都将以“未加密”的形式发送到服务器,所以可以使用加密后的密码进行登录。
JavaScript 不能用于安全性。必须要使用 HTTPS。
我不认为你会从中获得什么好处,肯定少于这样一个数学密集型的JavaScript会带来的性能损失。如果你使用它来加密一段数据并通过HTTP将其发送到服务器,那么虽然你已经保护了黑客无法发现密码是什么,但他们仍然可以通过使用相同的加密数据运行重放攻击来获取访问权限。
唯一可行的保护表单提交的方法是使用HTTPS。我知道设置HTTPS很麻烦,因为证书只适用于一个域,但如果信息真的很关键,那么与尝试在JavaScript中进行加密相比,这是更值得你投入时间的一个选择。
这个模型仍然存在问题,因为你仍然只是在连接中传递文本。如果在加密/解密/比较过程中没有一定的日期措施,你仍然会面临重放攻击的潜在风险。
即使超越了仍然普遍存在的中间人攻击,你仍然会发现你的加密算法和公钥是公开的事实。如果有人得到了一个加密密码,他们将有一个永久的来源来轻松地暴力破解该密码。
如果您从非验证的通信开始,您始终面临中间人攻击的风险。
无论如何,传输加盐和哈希后的密码总是比传输明文密码要好。因为也许您的登录系统很弱,但至少您没有共享用户的密码(这可能会与另一个系统共享,可能被用于银行账户)。
此外,不要存储该值,而是再次进行加盐和哈希处理。
如果您还使用了非对称加密,您可以增加防止窃听的保护。但同样不能防止中间人攻击。