情况:
出于安全考虑,我从不向我的服务器发送明确的密码。 它是sha1ed客户端,只有散列被发送到服务器。 编辑:这只是我安全的一部分(我还使用SSL,服务器端哈希,同步盐,...)请不要使它成为关于安全性的线程
要做到这一点,我有2个输入,第一个是可见的并命名为"密码"另一个隐藏名为" sha1password"。
当用户点击"登录"按钮,一个JS代码sha1s"输入#password",把它放入"输入#sha1passord"并清空"输入#password"在向服务器发送POST之前。
最后一步是阻止浏览器保存sha1密码。因为如果你这样做,表格将填充50个字符密码,用户会感到恼火。
问题:
这很好用,但浏览器不保存密码,输入密码"发送POST时为空。有没有办法允许浏览器保存密码而不将其发送到服务器?
答案 0 :(得分:0)
要记住的事情
$(function(){})
初始化之后)我的解决方案
嗨,我终于找到了浏览器的工作原理。 他们不喜欢有很多输入类型=密码的表单。
我将#sha1password重命名为#password。在第一个HTML页面中,我不能输入其他密码,所以我只回显#password输入!这样,在加载页面后,浏览器会看到一个简单的登录表单并启用自动完成功能(除了IE,但这个是愚蠢的,我不关心它......微软的人如何总是开发不同的软件?)。
页面初始化+ 100ms超时后,我添加一个名为#clearPassword的新输入类型=密码。然后我复制#password输入中的自动完成值。然后我使用宽度+高度隐藏#password输入为0px(显示无任何使其未发送到服务器)。
当用户在#clearPassword输入中键入密码时,我清空#password输入框。这将使新输入的密码进行哈希处理,其他明智的#clearPassword保持散列值。
当用户点击LOGIN时,仅当#password框为空时,我将#clearPassword输入并输出#clearPassword中的值。如果#password不为空,则为自动完成的散列值,这是正常的。
最重要的是,在将表单发送到服务器之前,我会分离$ clearPassword以防止chrome将其发送到服务器。
你完成了;)chrome只存储了清除密码的哈希值