0

假设我在一个字符串变量中有一个完整的 JS 脚本。与其执行整个脚本,我只想评估它的代码,以找出如果运行它会尝试检索(通过 Ajax)哪些 URL。

我可以将代码作为文本进行正则表达式搜索,但这不会找到故意使用replace().

这需要使用 Javascript 来完成。

如果可能的话,任何人都可以提供至少一个关于这如何可能的提示吗?

编辑:就上下文而言,我的项目是构建一个greasemonkey 脚本,从userscripts.org 的脚本列表中过滤掉Facebook 垃圾邮件诈骗。我已经有一些东西可以对用于诈骗的常见 facebook ajax URL 进行简单的文本搜索,但诈骗作者已经在尝试寻找解决方法。我需要可靠地捕获所有 Ajax URL 以进行检查,无论它们如何被串在一起并使用字符串函数进行更改。如果有兴趣,请参阅http://userscripts.org/scripts/show/163038 。

4

2 回答 2

0

你说整个事情都在一个变量中......我假设你的意思是一个字符串。使用任何内容的字符串表示形式,您可以将其解析为您想要的任何内容。棘手的部分是正确地做到这一点。在此处查看 RegEx(正则表达式):http ://www.regular-expressions.info/tutorial.html

这是一个查找 URL 的正则表达式:

^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$

回复:评论

您可以在 BuildString() 函数中连接所述字符串的所有可能实例,并返回一个带有结果的字符串,然后为您的 URL 正则表达式返回的变量。

IE:

function Concatenation() {
    var _strOutput = "<script>var x = 0; x += " + GetVariableIterator() + "; return x; </script>";
    return _strOutput;
}

function FinalResult() {
    var _strCombined = Concatenation();
    // Do Regex and work with URLs
}
于 2013-04-03T14:30:37.080 回答
0

本主题可能对您有所帮助:拦截所有 ajax 调用?

实际上,您可以重新定义 XHR 以使 ajax 调用按照您的意图进行,而不依赖于 Javascript 框架:

var ajax_urls = new Array();
var XHR_backup = new Array();
XHR_backup.open = XMLHttpRequest.prototype.open;
XHR_backup.send = XMLHttpRequest.prototype.send;

// Customize XHR behaviour
(function(XHR, ajax_urls) {
    "use strict";

    var open = XHR.prototype.open;
    var send = XHR.prototype.send;

    XHR.prototype.open = function(method, url, async, user, pass) {
        ajax_urls.push(url);
    };

    XHR.prototype.send = function(data) {
    }
})(XMLHttpRequest, ajax_urls);

// Evaluate your script
eval(resultScript);

for (var i = 0; i < ajax_urls.length; i++) {
    alert('Hey, my super XHR fetched ' + ajax_urls[i] + ' !!');
}

// Restore initial XHR behaviour
XMLHttpRequest.prototype.open = XHR_backup.open;
XMLHttpRequest.prototype.send = XHR_backup.send;

编辑:我还没有测试过这个片段,所以我正在等待你的反馈。

Edit2:测试和工作!http://jsfiddle.net/3qVUP/1/

于 2013-04-03T14:55:51.207 回答