#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 не реализует какую-либо форму правильного разделения между расширениями. Каждое расширение может делать все для всех. Это может даже привести к исключению шелл-кода и нанести произвольный другой ущерб.
Единственное, что вы можете попробовать, это запутать ваши секретные данные. Это, хотя и не предотвратит, но, возможно, только усложнит атаку.