我正在构建我的第一个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;
}
答案 0 :(得分:1)
提取脚本标记不足以识别恶意脚本。例如,考虑这个典型的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
来拦截正在编译的脚本(onScriptCreated
和onScriptDestroyed
将被调用)。
答案 1 :(得分:0)
脚本是外部脚本或内联脚本,因此您需要检查每个标记的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并拉出标签主体