【问题标题】:Building a Firefox extension to parse through script tags构建一个 Firefox 扩展来解析脚本标签
【发布时间】:2011-09-19 18:33:29
【问题描述】:

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

【问题讨论】:

  • 真正的恶意代码不会那么容易被发现。 :P
  • 你有很好的目标......你为什么不从一个Hello World开始!教程?

标签: javascript dom firefox-addon xul


【解决方案1】:

脚本要么是外部的,要么是内联的,因此您需要检查每个标签的 src 属性。然后您可以发出 AJAX 请求以获取脚本的源代码。但是,如果脚本来自另一个域(通常是),由于cross-domain policy

,您无法检索它
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 并提取标签正文可能会更容易

【讨论】:

  • 脚本要么是外部的,要么是内联的,要么是其他的,要么是动态加载的,要么...
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2015-08-12
    • 2023-03-26
    相关资源
    最近更新 更多