我正在开发一个小扩展,为了减轻我的工作,我想使用
prompt("enter password");
以便用户可以输入他/她的密码。我知道提示符会以纯文本形式显示密码,但还有什么其他安全问题吗?其他网站可以访问这个提示的内容吗(在这种情况下,这将是一个巨大的交易)?
如果您不担心输入的文本在没有***
s的情况下显示,那么它看起来很好。它会像其他JS处理密码一样安全。
其他网站可以访问这个提示符的内容吗
如果它是一个内容脚本,他们可以,如果他们拦截window.prompt
并用他们自己的实现覆盖它,例如:
// page script:
const originalPrompt = window.prompt;
window.prompt = (text) => {
const result = originalPrompt(text);
// HERE, the page can do something malicious with the result
// such as sending it to their server
console.log('Page detected:', result);
return result;
};
// Your script:
prompt('Password?');
但是这种方法会在很大程度上损害任何对前端密码的处理——这不是prompt
的问题,而是一般的前端问题。
prompt
是原生代码版本,这只能通过在页面上的任何其他代码运行之前运行您的代码以一种万无一失的方式完成。保存对document_start
上原始提示符的引用。
此外,请确保在后端上进行验证,而不是在前端。如果你的JS像
const userInput = prompt("enter password");
if (userInput !== 'theTruePassword') {
// wrong
return;
}
// do stuff
那么对于任何访问该网站的人来说,通过检查源代码绕过密码检查并进入do stuff
都是微不足道的。相反,请确保将密码发送到服务器并让服务器验证密码是否正确,然后让服务器将敏感信息发送回客户端。
我不建议使用提示符所以这里有一小段代码,你可以修改它来显示正确的密码设置后的内容
<!DOCTYPE html>
<html>
<body>
<label>enter your pin :</label>
<input type="text" id="pin" name="pin"><br>
<br>
<button id="mybutton" onclick="myfunction()">enter</button>
<p id="demo"></p>
<script type="text/javascript">
function myfunction()
{
if ((document.getElementById("pin").value)=="4567")
document.getElementById("demo").innerHTML = "you have the correct password"
else
alert("incorrect password")
}
</script>
</body>
</html>
你也可以修改密码,我已经设置为任何你想要的