Может ли window.prompt () быть более безопасным, чем форма classi c? - PullRequest
1 голос
/ 09 марта 2020

Я разрабатываю чистое javascript приложение, которое будет работать полностью на стороне клиента и ДОЛЖНО БЫТЬ ОЧЕНЬ БЕЗОПАСНЫМ .

В начале мне нужно получить пароль для расшифровки файл, после этого мне не нужно сохранять его для использования в будущем.

Поэтому мой вопрос: может ли window.prompt() быть более безопасным, чтобы получить этот пароль, чем записать его в поле <input> и получить его через document.getElementById().value?

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Нет, практических различий в безопасности нет. Внедренный скрипт может перехватить window.prom для перехвата всего введенного. Например:

// 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, но вам нужно быть уверенным , что это произошло до того момента, как скрипт может быть введен .

1 голос
/ 09 марта 2020

Насколько я знаю, нет никакой разницы, поскольку вы, похоже, не отправляете форму по сети, и нет никакого дополнительного уровня безопасности между 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'>
...