构建一个Firefox扩展来解析脚本标记

Building a Firefox extension to parse through script tags

本文关键字:脚本 扩展 Firefox 一个 构建      更新时间:2023-09-26

我正在构建我的第一个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;
}

提取脚本标记不足以识别恶意脚本。以这个典型的XSS代码为例:

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

如果您在浏览器中加载HTML页面,那么您可以查看JavaScriptDeobuscator扩展。此扩展使用JavaScript调试器服务来拦截正在编译或执行的所有JavaScript代码,即使它是动态生成的。您可以在上找到一些代码示例https://developer.mozilla.org/en/Code_snippets/JavaScript_Debugger_Service,JavaScriptDeobuscator将debuggerService.scriptHook设置为拦截正在编译的脚本(将调用onScriptCreatedonScriptDestroyed)。

脚本是外部的或内联的,因此需要检查每个标记的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并提取标记体

可能会更容易