通過覆蓋作用域的「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);
};
這真的沒有道理,你不希望將腳本標記添加到網站上嗎?無論您是被黑客入侵,還是隻是刪除服務器端的腳本標記,它們都不會奇蹟般地出現,除非其他人可以訪問您的服務器。 – adeneo
@Adeneo,我相信Yinon正在談論人們在他們的瀏覽器中使用像Grease Monkey –
@Yinon這樣的工具運行的腳本,你在說什麼特定的腳本?可能有辦法採取應對措施,但我知道沒有通用的腳本解決方案。 –