![在发送 POST 变量之前将其加密为 md5 是否安全?](https://linux22.com/image/532378/%E5%9C%A8%E5%8F%91%E9%80%81%20POST%20%E5%8F%98%E9%87%8F%E4%B9%8B%E5%89%8D%E5%B0%86%E5%85%B6%E5%8A%A0%E5%AF%86%E4%B8%BA%20md5%20%E6%98%AF%E5%90%A6%E5%AE%89%E5%85%A8%EF%BC%9F.png)
我有一个简单的登录表单,用户可在此输入用户名和密码。当 php 通过 POST 收到变量时,它会将密码加密为 md5,然后将其与数据库记录进行比较。
我的问题是:在发送变量之前,在浏览器中使用 javascript 加密密码是否更安全?我知道这不是一个万无一失的方法,但这能防止人们通过网络嗅探我的密码吗?或者这是否会使密码更容易受到攻击?
谢谢。
顺便说一下,我将用来加密 md5 的脚本在这里:http://www.webtoolkit.info/javascript-md5.html
答案1
我期望的最低限度是使用 JavaScript 在发送密码之前对其进行哈希处理。如果你使用CRAM-MD5,HTTP 摘要, 或者SSL(专家们花费了数千小时研究这些协议的安全隐患)。
你绝对必须使用盐。如果你不这样做,密码很容易被破解,使用彩虹桌。一个非常简单的盐,效果相当好,让服务器随页面发送随机盐。对密码进行 MD5 运算,然后对第一个哈希和盐一起进行 MD5 运算。在服务器端,您可以存储 MD5 密码,并对存储的哈希和页面中的盐运行快速 MD5;进行比较并进行适当的身份验证。这种盐被称为随机数。您还应该在原始密码和存储在服务器上的密码中添加长领域盐。
因此,一个“好”的方法(除了 SSL 和上面提到的其他方法)是:
A = MD5 ( Password + Realm)
B = MD5 ( A + Nonce)
通过网络发送 B。将 A 存储在服务器上。首先设置 A 时,请使用简单的可逆加密,如 ROT 或 XOR。我个人认为,任何低于这个标准的加密都是不负责任的,因为很多用户愚蠢地在几乎所有事情上都使用完全相同的密码(甚至网站创始人 Jeff 也这样做过)。
答案2
不,不要这样做。在登录屏幕强制使用 SSL,然后您就会知道用户名/密码在发送时是加密的。
然后,当您的 PHP 应用程序收到密码时,它可以对密码进行 MD5 或 SHA1 哈希处理并存储。
要登录,请对收到的密码进行哈希处理,并将其与存储的哈希密码进行比较。如果匹配,则允许用户通过。
顺便说一句,为了防止对密码数据库的字典攻击,您需要在散列之前对密码进行“加盐”。请参阅:http://en.wikipedia.org/wiki/Salt_(cryptography)
答案3
如果你在哈希上使用盐,嗅探器可以轻松访问你的页面并从你的 javascript 中获取你的哈希。此外,md5 并不十分安全从某种意义上说,它不是防碰撞的。所以不要这样做,如果真的很敏感,就使用 SSL。
答案4
它不安全,不会被人嗅探网络。
试想一下,当用户需要连接时,JavaScript 会对其密码进行哈希处理并将其发送到服务器。服务器会将其与数据库进行比较。
嗅探器只需嗅探密码并将其发送到服务器,因此这与明文密码一样安全。
正如其他人所说,我建议建立 SSL/TLS 隧道来连接到您的服务器。