Область применения Javascript / проблема безопасности в расширении Firefox

#javascript #security #firefox-addon #scope

#javascript #Безопасность #firefox-дополнение #область действия

Вопрос:

Я разрабатываю расширение FireFox и должен хранить некоторые значения, которые мне нужны для обеспечения безопасности и недоступности из любого другого расширения / страницы и т.д.

Я использую настройку для своего кода расширения, как показано здесь:

 if(!namesp) var namesp={};
if(!namesp.anothernamesp) namesp.anothernamesp={};

namesp.anothernamesp = function() {
  var mySecureValue = ''; //is this variable accessible from anything aside from inside the namesp.anothernamesp scope?

  return {
    useSecureValue: function() {
    //do something here with mySecureValue
    }
  };

  function getSecureValue() { //can this method be called from anywhere besides inside the namesp.anothernamesp scope?
    return mySecureValue;
  }

}();
  

Есть ли какой-либо способ, которым что-либо, кроме моего собственного расширения, может получить доступ к «mySecureValue»? Чтобы сохранить этот объект глобальным, доступным для любых окон, которые я мог бы открыть в своем расширении и т.д., Я передаю объект в окно в методе window.OpenDialog() и использую window.arguments для доступа к нему из вновь созданных окон. Спасибо.

Комментарии:

1. Я не знаю ответа, но, кстати, вы проверяете, создавать namesp.anothernamesp или нет во второй строке кода, но вы все равно перезаписываете его в четвертой строке кода. Я не думаю, что вторая строка кода что-то добавляет.

Ответ №1:

Кажется довольно правильным. Фактически, именно этому учат большинство руководств и книг для имитации частных методов и свойств.

Ответ №2:

Нет, никак нельзя предотвратить влияние одного расширения на другое расширение.

Причинами этого являются:

  • расширения — это файлы Zip-архива, переименованные для получения расширения имени файла *.xpi.
  • расширения записываются в текстовых файлах с использованием диалекта JavaScript
  • любое другое расширение может по желанию открывать любой файл, к которому имеет доступ ваш браузер, и получать к нему доступ.

Если какое-либо другое расширение хочет прочитать вашу переменную mySecureValue , оно может сделать это с помощью:

  • доступ к вашему файлу extensions *.xpi (используя nsIFile для чтения его из profile/extensions папки)
  • разархивируйте его nsIZipReader
  • прочитайте переменную mySecureValue из вашего исходного файла!

Самая неприятная причина всего этого заключается в том, что Mozilla Firefox не реализует какую-либо форму правильного разделения между расширениями. Каждое расширение может делать все для всех. Это может даже привести к исключению шелл-кода и нанести произвольный другой ущерб.

Единственное, что вы можете попробовать, это запутать ваши секретные данные. Это, хотя и не предотвратит, но, возможно, только усложнит атаку.