我正在开发一个纯javascript应用程序,它将完全在客户端运行,并且必须非常安全。
一开始我需要获得一个密码来解密文件,之后我不需要保存它以备将来使用。
所以我的问题是:window.prompt()
获取这个密码是否比将其写入<input>
字段并通过document.getElementById().value
检索更安全?
感谢
不,不能保证安全性方面的实际差异。注入的脚本可以挂接window.prompt以拦截任何输入的内容。例如:
// In the attacker's script
const _prompt = window.prompt;
window.prompt = function(p) {
const v = _prompt(p);
alert(`I intercepted ${v}`);
return v;
}
// In your script
window.prompt("Enter your secret password");
您也许可以获得window.prompt的私有句柄,但您必须确信它发生在可以注入脚本之前。
据我所知,这没有什么区别,因为你似乎没有通过网络发送表单,window.prompt和浏览器之间也没有额外的安全级别(你必须在某个时间处理输入的密码(。
至于任何其他漏洞,如密钥记录器、受感染的软件包、弱密码或错误存储的密码,也存在同样的风险。
不知道我是否会在任何javascript应用程序中使用"非常安全"一词,但好吧,你已经知道了。
编辑:实际上,有一个主要区别。我认为没有一种方法可以像使用设置为键入密码的表单输入一样屏蔽window.prompt中的条目。如果没有解决方法,而且我认为没有,考虑到其他一切都是相同的安全级别,那么输入字段无疑更安全
https://developer.mozilla.org/de/docs/Web/API/Window/prompt
<button onClick="window.prompt()">trigger prompt</button>
<input type='password'>