在 PHP 中屏蔽表单密码

Mask a form password in PHP

经过几个小时的谷歌搜索、观看视频以及尝试在我的本地 wamp 服务器上安装 SSL 失败后,我即将放弃。

所以我来这里寻求帮助

我有一个简单的表单,登录用户并将详细信息与 php 数据库进行比较,密码存储在数据库的 MD5 哈希中。

我知道 md5 是不安全的,而 https 是保护传输等的最佳方式,但我在这里只需要在传输过程中简单地屏蔽密码,这样它在 wireshark 捕获过程中就不会以纯文本形式显示。

表单代码为:

<form method="post" action="index.php" name="loginform" id="loginform">
<fieldset>
    <label for="username">Username:</label><input type="text" name="username" id="username" /><br />
    <label for="password">Password:</label><input type="password" name="password" id="password" /><br />
    <input type="submit" name="login" id="login" value="Login" />
</fieldset>
</form>

有没有办法像这样设置密码:

<label for="password">Password:</label><input type=md5("password")

同样,它只是我需要的快速简单的实现方式。

提前致谢

韦恩

一个解决方案是使用像 https://github.com/blueimp/JavaScript-MD5 这样的 javascript MD5 库,并在提交表单时调用 md5() 函数。 仅使用 html 代码无法做到这一点。

如您所知,密码的 md5 散列通常在服务器端由代码中的 index.php 页面完成。 https 传输保护密码不被窃听。如果 wireshark 能够解密它,那是因为 wireshark 以中间人的身份拦截通信并为使用的 url 生成另一个 https 证书。浏览器应该警告用户通信不安全,因为证书不是来自浏览器信任的证书颁发机构。尽管如此,如果用户继续,他应该知道他页面上的所有内容都可以修改,包括进行哈希处理的代码。

https 是经过验证的登录密码加密和会话保护解决方案。

如果无法使用 https,防止密码被滥用的替代方法可能是非对称加密:使用服务器提供的 public 密钥在浏览器中加密密码,然后在服务器上解密与相应的私钥。进行加密的 javascript 库是 https://github.com/travist/jsencrypt。没有私钥,攻击者使用wireshark将无法解密密码。

密码必须与来自服务器的随机数(例如序列号)'salt'一起加密,以防止攻击者重复使用密文。

警告:如果您打算在会话中使用密码,请阅读 https://en.m.wikipedia.org/wiki/Session_hijacking。 https 又是一个解决方案。