有没有办法阻止(特定)恶意脚本在我自己的网页上运行?

时间:2013-11-24 17:01:14

标签: javascript asp.net client-side

问题是在用户端运行的某些插件(或其他第三方)会影响我的网站;更改脚本,替换某些元素或以某种方式损害用户的体验。

我想要做的是阻止特定的js文件(来自我熟悉的其他服务器)被加载或仅允许我的脚本文件加载到我的网站上。

我知道我可以在加载之后从dom中删除特定的脚本标记,但这不能解决问题,因为代码会粘在内存中并且无论如何都会运行。

有没有办法最初编写一个页面来执行此操作?

1 个答案:

答案 0 :(得分:0)

通过覆盖范围的“appendChild”函数解决了这个问题,但将其保存为不同的函数名。

在重写的“appendChild”函数中,我添加了条件以确保没有具有某个阻塞源(来自数组列表)的脚本将执行原始的“appendChild”函数。

希望能够清除它。

var blockedUrlsArr = [
    'someUrl/malicious1.js',
    'someUrl/malicious2.js',
    'someUrl/malicious3.js'
];

function checkBlockedUrls(url) {
    var result = false;
    for (var i = 0; i < blockedUrlsArr.length; i++) {
        if (url.indexOf(blockedUrlsArr[i]) !== -1) {
            result = true;
            break;
        }
    }
    return result;
}

var originalAppendChild = Element.prototype.appendChild;

Element.prototype.appendChild = function () {
    if (arguments[0].tagName.toLowerCase() === 'script') {

        if (!checkBlockedUrls(arguments[0].src)) originalAppendChild.apply(this, arguments);
    }
    else originalAppendChild.apply(this, arguments);
};