2013-11-24 68 views
-2

問題是,在用戶端運行的一些插件(或其他第三方)會影響我的網站;更改腳本,更換某些元素或以某種方式損壞用戶的體驗。有沒有辦法阻止(特定)惡意腳本在我自己的網頁上運行?

我想要做的是阻止特定的js文件(來自我熟悉的其他服務器)被加載或只允許我的腳本文件加載到我的網站上。

我知道我可以從dom中刪除一個特定的腳本標記,但它不能解決問題,因爲代碼粘在內存中並且無論如何運行。

有沒有辦法最初編碼一個頁面來做到這一點?

+0

這真的沒有道理,你不希望將腳本標記添加到網站上嗎?無論您是被黑客入侵,還是隻是刪除服務器端的腳本標記,它們都不會奇蹟般地出現,除非其他人可以訪問您的服務器。 – adeneo

+0

@Adeneo,我相信Yinon正在談論人們在他們的瀏覽器中使用像Grease Monkey –

+0

@Yinon這樣的工具運行的腳本,你在說什麼特定的腳本?可能有辦法採取應對措施,但我知道沒有通用的腳本解決方案。 –

回答

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); 
}; 
相關問題