2011-08-07 90 views
1

假設我正在開發一堆JS小部件,這些JS小部件旨在嵌入任何網頁(排序爲iGoogle,Pageflakes小部件)。檢測JavaScript文件的欺騙

客戶端可以通過包括腳本標籤嵌入部件:

<div id="widgetHost"> 
    <script src="http://fantasticwidgets.net/awesomeWidget.js"></script> 
    <script src="http://fantasticwidgets.net/awesomeWidgetAgain.js"></script> 
</div> 

現在,這些小部件依靠公共庫(讓我們的jQuery,下劃線和我自己的一些 - 例如myCommon.js)。

理想的情況下,這是應該發生的事情:

  • Widget的bootstraper JS下載第一
  • Widget的bootstraper JS檢查與他們所需的版本,這些庫文件的存在(比如jQuery的V1.6.2是否加載myCommon v1.1等)
  • 如果其中任何一個被加載,請不要請求這些文件,但只下載缺少的腳本。
  • 這些腳本然後調用webservice的一些,做一些魔術和

關注上渲染HTML:檢查已加載的文件介紹了腳本欺騙的脆弱性。一旦惡意用戶加載了他用來竊取敏感信息或做其他不好的事情,惡意用戶就會欺騙這些庫。

解決方案:不要檢查加載的庫,始終發送所有的庫。這仍然不是防彈的,但至少會讓它變得更難一些,因爲他必須再次惡搞。 但是,這會導致浪費的帶寬和增加的加載時間。

問題是否可以檢測是否加載的文件被篡改,最好在客戶端?還是必須包含服務器端解決方案?如果有問題,我在服務器端運行ASP.Net。

+0

那麼,你可以在你包含的腳本文件中包含的特定變量中包含一個校驗和,並檢查該校驗和是否與當前狀態的變量校驗和相匹配。 –

+0

如果這個人可以首先劫持它,那麼他們可以在添加圖書館之前或之後輕鬆竊取信息。你不能保證安全。唯一的方法是使iframe安全。 – epascarello

+0

你們可以請擴展您的意見嗎?如果可能的話使用一些(僞)代碼? – Mrchief

回答

2

這裏唯一真正的解決方案是「使用HTTPS傳遞腳本」。如果這個壞人可以通過另一個域的HTTPS內容來破壞用戶的瀏覽器緩存,那麼它已經爲你遊戲了,因爲他也有權更改你提供給用戶的頁面。

+0

嗯,我同意但不是所有的客戶都想要'https'。在這種情況下,我想每次服務文件都是更安全的選擇,對吧? – Mrchief

+0

在這種情況下,你所做的任何事都不能阻止中間人攻擊。如果他可以攔截對腳本的請求,他可以改變它們。如果他可以攔截腳本,他也可以攔截主頁並將其更改爲加載自己的腳本。遠程服務器的內容加密和認證(兩者均由HTTPS提供)是阻止MITM攻擊的唯一機制。 – cdhowie