Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从密码字段中隐藏除一个字符以外的所有字符_Javascript_Html_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Javascript 如何从密码字段中隐藏除一个字符以外的所有字符,javascript,html,firebase,firebase-realtime-database,Javascript,Html,Firebase,Firebase Realtime Database,所以我对这个问题做了很多研究,但没有找到明确的答案。基本上,在用户的帐户页面上,我希望能够显示他们的密码,除了第一个字母外,其余都隐藏起来。它看起来是这样的: alert(mask("supersecretpass")); 密码:p******* 密码将作为普通字符串从数据库中提取,然后需要在放入相应的文本字段之前隐藏。如何用javascript实现这一点 补充信息 我希望密码存储在一个普通的或标签中,在用户请求之前不可编辑,我会处理它。 所有密码当前都存储在firebase数据库中。 正如许

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

alert(mask("supersecretpass"));
密码:p*******

密码将作为普通字符串从数据库中提取,然后需要在放入相应的文本字段之前隐藏。如何用javascript实现这一点

补充信息

我希望密码存储在一个普通的或标签中,在用户请求之前不可编辑,我会处理它。 所有密码当前都存储在firebase数据库中。
正如许多其他人所说,不建议使用JavaScript来实现这一点。使用JavaScript执行此操作需要以明文发送密码,任何窥探用户网络的人都可以看到该密码。最好先在服务器上隐藏字符,然后将结果发送到浏览器。完全使用JavaScript是一个巨大的安全风险。这样做之前要仔细考虑

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

window.addEventListener'load',函数{ var passwordBox=document.getElementById'password'; var密码; passwordBox.addEventListener'input',函数{ password=this.value; 这个值=; var characters=password.split; ifcharacters.length>0{ this.value=字符[0]; forvar i=1;i 如果您只是有一个密码字符串,并且希望该字符串带有星号:

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

alert(mask("supersecretpass"));
输入屏蔽


与www139s答案类似,但如果有正确的密码输出…

最后一件事是以明文形式传递用户密码。最后要做的第三件事是用javascript替换密码字符。这两种方法都允许未经授权的人泄露您的用户密码。但是,您最不应该做的事情是以简单的形式将用户密码存储在数据库中,这样就允许未经授权的人员获取所有用户的密码

即使您在服务器端替换密码字符并按照其他人的建议以p*******格式发送回去,您也会发出明确的信号,表明您将用户的密码存储在未加密的格式中,因此您的站点更容易受到攻击


请记住,大多数(如果不是所有的话)捆绑包/框架都提供用户管理支持,默认情况下至少包括基本密码加密,就像。

您打算在什么元素中显示此屏蔽密码?文本字段?和输入文本一样?你什么时候得到这个?通过ajax?还是正常的页面加载?无论如何,存储纯文本密码通常被认为是绝对错误的。如果值得拥有一个受密码保护的系统,那么就值得使用bcrypt或scrypt或其他东西正确地存储密码。如果需要,请分别维护第一个字符,尽管这似乎也不是一个特别好的主意。这到底值七张赞成票多少钱?不仅要对数据库中的密码进行哈希运算,而且如果必须显示密码,甚至其中的一个字母,必须使用服务器端语言,绝对不是JavaScript。请澄清这是否纯粹是显示除第一个字符外的所有字符都替换为星号的密码问题,或者您希望有一个这样的密码输入字段。@Jonasw您能解释一下该语句的含义吗?您正在修改实际值,因此,您无法恢复真实密码以使用它。@www139您使用var在该事件处理程序外声明密码,然后在处理程序内重新声明密码。@Pointy哦,是的。哎呀,我要删除那个变量。我忘了让它写入全局变量。@Pablomatisagomez你可以,但他不感谢你。研究了你的答案后,你比我更正确。但是,在代码中,您假设当用户按下退格键时,他们删除了最后一个字符。这是不对的。但是,它比我的好得多。我正在研究一个新的答案。我认为键盘密码是解决这个问题的唯一方法。如果输入是**,密码是abcd,用户删除了一个字符,为什么不正确呢?如果框中用户的插入符号不在文本框的末尾怎么办?当用户删除某些内容时,它将不是最后一个字符。代码假定用户的插入符号始终位于文本框的末尾。回答这个问题几乎是不可能的。唯一的方法是实际读取插入符号的位置
这太复杂了。浏览器支持也非常有限。这是一个点用户也可以标记+ctrl+x=>不可能。我的答案适用于大多数情况,您只需按+1键阻止鼠标+箭头键;你的答案比我的好。但是,最好的解决方案是使用服务器端编程。