所以我对这个问题做了很多研究,但没有找到明确的答案。基本上,对用户而言#39;帐户页面,我希望能够显示他们的密码,除了隐藏的第一个字母。它看起来像这样:
密码:p *******
密码将作为普通字符串从数据库中提取,然后需要在放入相应的文本字段之前隐藏。我怎样才能在javascript中实现这个目标?
已添加信息
<p>
或<h3>
标记中 - 用户在请求之前无法编辑(我会处理)。 firebase
数据库中。答案 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一样。