我在用户登录表单上使用加密技术,以避免以纯文本形式传递密码。我在PHP会话中存储一个唯一的挑战值,在HTML表单隐藏字段中包含相同的值,然后我使用基于JavaScript的SHA1-1脚本在提交密码之前对其进行哈希处理。 (然后使用存储在会话变量中的质询将其与服务器端的相同进行比较)。
我对上述内容本身没有任何问题,但我认为最好解释为什么我需要这样做。
我正在提交这样的表格:
var password = sha1(document.forms['loginform'].password.value);
password = sha1(document.forms['loginform'].challenge.value + password);
document.forms['loginform'].challenge.value = '';
document.forms['loginform'].password.value = password;
document.forms['loginform'].style.display = 'none';
document.forms['loginform'].submit();
问题是那里的第5行。我想隐藏加密的密码值,因为如果我不这样做,我会有人说'那不是我的密码','我不喜欢',等等。
问题是,在提交之前将显示设置为“none”,似乎会使Internet Explorer 9崩溃并显示如下消息:
Problem Event Name: APPCRASH
Application Name: iexplore.exe
Application Version: 9.0.8112.16421
Fault Module Name: MSHTML.dll
所以,我想知道是否有人有更好的方法去做这件事。即,在提交之前是否有一种好的或“正常”的方式来隐藏JavaScript更新的表单值?
由于
编辑: 现在我设置密码字段文本颜色以匹配背景。这有点像黑客。我不想将下面的标记作为答案 - 我不是真的同意,这有点像我自己的问题。 (我会,而不是永远保持开放:)。这不是什么大问题。我会留下一点。
答案 0 :(得分:1)
这种“加密技术”没有任何帮助。您仍然以纯文本格式传递密码。成像某人使用嗅探器并获得密码哈希(以及会话cookie ...),他可以轻松登录系统。
如果您需要安全性,请使用 https 。
答案 1 :(得分:0)
我刚遇到类似的问题(see here)。微软的IE开发团队已确认这是一个渲染问题。如果这是相同的事情,它似乎与表单提交无关,而是在设置输入字段的值并在分配某些样式时立即隐藏字段的父项时发生(see above link)。微软的建议是强迫IE使用IE8渲染引擎,但我发现将输入包装在另一个没有样式的元素(例如SPAN或DIV)中似乎可以解决问题。
如果此解决方法适合您,请告诉我。