Создание расширения Firefox для анализа тегов скрипта - PullRequest
0 голосов
/ 21 июня 2011

Я нахожусь в процессе создания моего первого расширения Firefox, и я врезался в стену.Я также не знаком с javascript, хотя знаю, как программировать.

Расширение пытается идентифицировать вредоносный код javascript, выполняя весь код, содержащийся в тегах скрипта, через классификатор.У меня уже есть классификатор, встроенный в Python, но я не могу понять, как определить javascript и отправить его в классификатор.Каков наилучший способ перехватить все промежуточные теги скрипта, один за другим, и отправить их в классификатор.В журнале говорится, что каждый элемент, который я собираю в массиве, имеет вид "var scripts = document.getElementsByTagName ('script');"имеет тип объекта xulelement, но я не знаю, как получить реальный код.В цикле for я хотел бы отправить каждый элемент в массиве в классификатор.Ниже я включил то, что у меня есть:

function extractScripts(){
    var scripts = document.getElementsByTagName( 'script' );
    scriptExtractor_Log( scripts.length + ' scripts were found' );
    var sLen = scripts.length
    for ( var i=0, len=sLen; i<len; ++i ){
      scriptExtractor_Log( 'script ' + i + ': ' + scripts[i]);
    }               
    return 0;
}

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Извлечение тегов сценария недостаточно для выявления вредоносных сценариев.Рассмотрим этот типичный код XSS, например:

<img src="this_does_not_exist" onerror="alert('Doing something evil')">

Если вы все равно загрузите страницу HTML в браузере, вы можете взглянуть на расширение JavaScript Deobfuscator .Это расширение использует службу отладчика JavaScript для перехвата всего кода JavaScript, который компилируется или выполняется - даже если он генерируется динамически.Вы можете найти несколько примеров кода на https://developer.mozilla.org/en/Code_snippets/JavaScript_Debugger_Service, Деобфускатор JavaScript устанавливает debuggerService.scriptHook для перехвата компилируемых скриптов (будут вызываться onScriptCreated и onScriptDestroyed).

0 голосов
/ 21 июня 2011

Скрипты являются внешними или встроенными, поэтому вам необходимо проверить атрибут src каждого тега.Затем вы можете сделать AJAX-запрос на получение исходного кода скрипта.Однако, если скрипт находится в другом домене (которым он часто является), вы не можете получить его из-за междоменной политики

for ( var i=0, len=sLen; i<len; ++i ){
  if ( scripts[i].src ) { //check if src is defined
    var XHR = new XMLHttpRequest(); //create a new XHR object
    XHR.open("GET",scripts[i].src,false); // the false here makes your request synchronus
    XHR.send(); //send the request
    scripttxt = XHR.respose;
  } else {
    scripttxt = scripts[i].innerHTML;
  }
  scriptExtractor_Log( 'script ' + i + ': ' + scripttxt);

}  

Если вы уже используете python, он может простопроще использовать библиотеки python для разбора HTML и извлечения тела тегов

...