window.prompt() 可以比经典形式更安全吗?

Can window.prompt() be more secure then the classic form?

我正在开发一个纯粹的 javascript 应用程序,它将 运行 完全在客户端,必须非常安全

一开始我需要一个密码来解密一个文件,之后我就不需要保存它以备将来使用。

所以我的问题是:window.prompt() 获取此密码是否比将其写入 <input> 字段并通过 document.getElementById().value 检索更安全?

谢谢

据我所知,这没有区别,因为您似乎没有通过网络发送表单,并且 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'>

不,不能保证实际的安全性差异。注入的脚本可以挂钩 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 的私有句柄,但您必须确定它发生在可以注入脚本之前。