经过数小时的谷歌搜索,关注视频以及在我的本地wamp服务器上安装SSL失败的尝试后,我处于放弃的尖端。
所以我来这里寻求帮助
我有一个简单的表单,记录用户并将详细信息与php数据库进行比较,密码存储在数据库的MD5哈希中。
我知道md5是不安全的,而https是保护传输等的麻烦方式,但我在这里需要的只是在传输过程中简单地屏蔽密码,以便在wirehark捕获期间无法以纯文本形式查看。
表单代码为:
<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")
同样,我需要的东西快速而简单。
提前致谢
韦恩
答案 0 :(得分:0)
解决方案是使用像https://github.com/blueimp/JavaScript-MD5这样的javascript MD5库,并在表单提交时调用md5()函数。 单独使用html代码就无法做到这一点。
如您所知,通常密码的md5哈希是在服务器端通过代码中的index.php
页面完成的。 https传输保护密码不被窃听。如果wireshark能够解密它,那是因为wireshark以中间人的身份拦截通信,并为所使用的URL生成其他https证书。浏览器应警告用户通信不安全,因为证书不是来自浏览器信任的证书颁发机构。如果尽管如此,用户继续,他应该知道他的页面上的所有内容都可以修改,包括进行散列的代码。
答案 1 :(得分:0)
https是登录密码加密和会话保护的首选解决方案。
如果无法使用https,防止密码被滥用的替代方法可能是不对称加密:使用服务器提供的公钥加密浏览器中的密码,并使用相应的私钥在服务器上对其进行解密。用于加密的JavaScript库是https://github.com/travist/jsencrypt。如果没有私钥,使用wireshark的攻击者将无法解密密码。
密码必须与服务器中的'salt'(nonce(例如序列号))一起加密,以防止攻击者重复使用密码。
警告:如果您打算使用会话密码,请阅读https://en.m.wikipedia.org/wiki/Session_hijacking。 https再次成为解决方案。