如何防止.htaccess加载跨域javascript?

时间:2012-12-14 14:19:17

标签: javascript .htaccess cross-domain

开发我的网站的公司刚刚在Zend Guard加密的index.php文件中添加了这个javascript代码(我用“查看源代码”看到了它):

(function ()
{
    var smrs = document.createElement("script");
    smrs.type = "text/javascript";
    smrs.async = true;
    smrs.src = document.location.protocol + "//www.domain.com/file.js";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(smrs, s);
})();

它注入了一个非常激进的javascript代码,它在页面底部添加了一个到他们网站的图像链接(每10秒有一个SetInterval)。

问题?目前被指控存在重大欺诈行为的本地竞争对手拥有相同的CMS和相同的图像链接。

与该竞争对手联系对我有害。我想知道是否有办法阻止使用.htaccess加载“www.domain.com/file.js”。

感谢。

1 个答案:

答案 0 :(得分:2)

你不能(使用htaccess)。这个javascript创建一个脚本标签来加载外部JavaScript。呼叫永远不会通过服务器。所以apache(htaccess)无法阻止它。

最简单的方法是搜索源代码并删除脚本(如果您有权访问)。

<强>更新

我看到脚本是加密的......如果你可以在最开始插入脚本(在代码执行之前你可以在insertBefore方法上创建一个钩子。这是一个working fiddle

var ALLOWED_DOMAINS = ['www.klaartjedevoecht.be', 'jsfiddle.net'];
function creatHook(){
    function getDomain(url) {
       return url.match(/:\/\/(.[^/]+)/)[1];
    }
    var insertBefore = Element.prototype.insertBefore;
    Element.prototype.insertBefore = function(new_node,existing_node){
        if(new_node.tagName.toLowerCase() === 'script' && ALLOWED_DOMAINS.indexOf(getDomain(new_node.src)) > -1){
            insertBefore.call(this, new_node, existing_node);
        }
    }
}
creatHook();

//TESTING CODE:

var smrs = document.createElement("script");
    smrs.type = "text/javascript";
    smrs.async = true;
    smrs.src = document.location.protocol + "//www.klaartjedevoecht.be/test.js";

//var smrs = document.createElement("img");
//    smrs.src= "http://img52.imageshack.us/img52/7653/beaverl.gif";

var s = document.getElementsByTagName("div")[0];
    s.parentNode.insertBefore(smrs, s);

我同意这有点黑客攻击,但至少它比计时器解决方案更清洁。如果你不能删除它,没有干净的解决方案。