如何从密码字段中隐藏除一个字符以外的所有字符

时间:2016-12-27 18:05:26

标签: javascript html5 firebase firebase-realtime-database

所以我对这个问题做了很多研究,但没有找到明确的答案。基本上,对用户而言#39;帐户页面,我希望能够显示他们的密码,除了隐藏的第一个字母。它看起来像这样:

  

密码:p *******

密码将作为普通字符串从数据库中提取,然后需要在放入相应的文本字段之前隐藏。我怎样才能在javascript中实现这个目标?

已添加信息

  • 我希望将密码存储在普通的<p><h3>标记中 - 用户在请求之前无法编辑(我会处理)。
  • 所有密码当前都存储在firebase数据库中。

3 个答案:

答案 0 :(得分:4)

正如许多其他人所说的那样,建议不要使用JavaScript。使用JavaScript执行此操作需要使用纯文本发送密码,任何窥探用户网络的人都可以看到该文本。最好先隐藏服务器上的字符,然后将结果发送到浏览器。完全使用JavaScript是一个巨大的安全风险。在这样做之前要仔细考虑。

此答案假定您希望变量存储用户的实际密码以供日后使用。变量password包含实际密码。文本框仅保留第一个字母,而所有其他字符均由*表示。

window.addEventListener('load',function(){
  var passwordBox = document.getElementById('password');
  var password;
  passwordBox.addEventListener('input',function(){
    password = this.value;
    this.value = '';
    var characters = password.split('');
    if(characters.length > 0){
        this.value = characters[0];
        for(var i = 1; i < characters.length; i++){
            this.value += '*';
        }
    }
  });
});
<input type="text" id="password">

答案 1 :(得分:3)

字符串屏蔽

如果您只是一个密码字符串,并希望字符串包含星号:

function mask(str){
 return str.split("").map((e,i)=>i?"*":e).join("");
}

像这样使用:

alert(mask("supersecretpass"));

输入屏蔽

window.onload=function(){
   var passelem=;//add your input elem here
   var password="";//the real password
   passelem.oninput=function(){
      if(password.length>this.value.length){
      //user pressed backspace...
      var arr=password.split("");
      arr.pop();//remove last char
      password=arr.join("");
      return;
      }
       password+=this.value.split("").pop();//add added char to password
       this.value=password.split("")[0];//add first char
       for(i=1;i<password.length;i++){
           this.value+="*";//add the *
        }
    };
   //kill arrows
  document.onkeydown=function(e){
   if(e.wich==33||e.wich==34){
    e.preventDefault();
    return false;
   }
  };
 };

像www139s一样回答,但密码输出正确...

答案 2 :(得分:3)

你应该做的第二件事是传递用户&#39;密码为纯文本。你应该做的第三件事是用javascript替换密码字符。这两种情况都允许未经授权的人员泄露您的用户密码。但你应该做的最后一件事是存储用户&#39;您的数据库中的密码以简单的形式存在,允许未经授权的人员获取您的所有用户&#39;密码。

即使您更换服务器端的密码字符并将其发送回&#34; p *******&#34;与其他人建议的形式一样,您明确表示您存储了您的用户&#39;密码以非加密形式存在,因此您的网站更容易受到攻击。

请注意,大多数(如果不是全部)捆绑包/框架都提供用户管理支持,默认情况下至少包括基本密码加密,就像FOSUserBundle一样。