阻止用户通过Firebug/Chrome开发工具查找密码

Man*_*mar 22 javascript browser security client dom

隐藏密码

对于护照输入字段:

<input type="text" required="" tabindex="2" class="std_textbox" placeholder="Enter your account password." id="pass" name="pass">
Run Code Online (Sandbox Code Playgroud)

<input type="password">更改为<input type="text">密码时显示.在已保存密码或从密码管理器生成的系统中,这可能存在风险.

显示密码

可以在这里使用客户端加密吗?如何实施?

Eri*_*ric 19

简短的回答:不幸的是,它无法避免.这是因为所有客户端代码(JavaScript)都可以由客户端本身修改 - 从而使基于客户端的安全系统易受攻击.

我能想到的唯一可行的解​​决方案是存储密码的哈希表示,而不是原始密码.这将(如果您忽略hash-bruteforce攻击)保持原始密码安全.

哈希是原始文本的表示,并且是不可逆的.也就是说,任何算法都不能使用哈希来检索原始字符串.hash'的示例是MD5和SHA.此技术通常用于路由器,其中密码通常存储在浏览器中.

澄清:永远不要以明文形式存储您的密码,如果您想采用这种预先输入密码的技术; 散列和/或加密必须在服务器端进行.

  • 看到你不理解我很遗憾我的意思是哈希是在服务器端生成的. (6认同)

Ely*_*Ely 8

我看到了不同答案的解决方案.在所有这些中,只是看到密码更难,但它不会阻止某人看到它.

注意:在客户端,可以操纵和检查JavaScript对象.在其他答案中提供的解决方案中,我可以轻松访问密码信息.


正如其他人所说,您无法阻止用户使用客户端上的开发人员工具查看密码.

我想不出一个用例,但是你提到了自动表单填充Remember me选项.

自动表格填写,据我所知是主密码保护.他们应该是; 如果我无法安全地打开或关闭它,我就不会使用它.在这种情况下,每当我处于共享计算机的情况时,我都有责任注销.

记住我的选项,通常由网站推广,只应在它是您的个人计算机时使用,并且您不希望与其他人共享您的设备.请勿使用它或确保没有其他人使用您的帐户.再次,这是你的责任.

现在,您仍然需要防止此类攻击.我能想到的只有以下几点:

  1. 客户端没有可行的解决方案.所以你的解决方案必须在服务器端工作.
  2. 在服务器端,您可以加密或散列函数.有关详细信息,请参阅此问题.我将在本答复的其余部分进一步讨论这个问题.您可以选择任一解决方案,但实现方式不同.

如果使用加密,则可以随时解密.

在以下情况中,这可能对您有所帮助:始终保持密码加密.他们应该永远匹配.但是,当用户想要更改密码时,它将是明文.用户无法以加密形式键入.你必须解决这个问题.有解决方案.我相信你明白了.

如果使用(加密)散列,则很难破解.你不能解密它.

在以下情形中,这可能对您有所帮助:服务器仅发送散列版本.这样,攻击者就无法使用此信息.你需要相应地设计它,但我想你也是这样想的.

话虽如此,我确实没有看到一个可接受的用例来满足您的要求.

让我解释一下原因.您希望防止攻击者在用户记住密码或使用自动表单填充程序时看到密码.好吧,如果攻击者能够访问用户的计算机,他就可以简单地登录,为什么还要看密码呢?

谷歌或Facebook等公司没有为您的用例提供解决方案是有原因的.走了另一条路,试图通过双因素身份验证来提高安全性

如果你可以使用它,那就去做吧.它并没有完全解决问题,但您可以期望它可以提高安全性.特别是攻击者更难.