2011-06-29 60 views
2

問題:當我讓客戶將自定義JS腳本添加到他們的頁面時應該採取什麼預防措施?我讓客戶端將JavaScript添加到網頁之前應採取哪些預防措施?

如果你想要更多的細節:

我在定製CMS那樣工作項目的公司,CMS具有「組」,每個用戶「擁有」他們做自己的事情的數量。

新的要求是,一些羣體想要添加谷歌分析,看看他們在做什麼。所以我很自然地加在表中的列並提出代碼adjustements所以如果在該列的一些數據,我只是用下面一行在母版頁設置腳本了:

ScriptManager.RegisterClientScriptBlock(Page, typeof(Page), "CustomJs", CustomJs, true); 

它工作得很好,只是,它讓我想到了......

對於如何從js訪問cookies等有很好的知識的人是很容易的。當然,每個組都是主持人,只有超級管理員可以添加這個JavaScript,當然,他們不會愚蠢到可以破解他們自己的組織。 每個組都有自己的代碼,因此它不可能破解其他羣體但仍

我不是讓用戶自己添加的JavaScript代碼真的很舒服。 我可以自己監控每個小組,但這些小組的成長非常迅速,而且我會打到一段時間,我不再能夠做到這一點。

因此,要簡要介紹一下:爲防止發生意外,我應該採取哪些預防措施?

ps:確實嘗試谷歌,沒有令人信服的答案在任何地方。

回答

5

與其允許用戶添加自己的Javascript文件,並且考慮到這裏唯一的要求是針對Google分析,爲什麼不讓他們將分析ID放入CMS中,如果存在,請輸出相關的Google Analytics碼?

這樣您就可以滿足用戶需求並避免防範惡意腳本。

+0

想說這個。幾乎所有的情況下,Google都可以在自己的用戶可編輯內容上進行操作,前提是您曾經使用Google Code,Chrome網上應用店等.Google Analytics ID的正則表達式也非常簡單。 – brymck

+0

這是一個非常好的主意。雖然現在**的要求**只是分析,可能在未來它會更改爲包括他們自己的自定義腳本,例如,我不知道,一些小工具或網站計數器等。但是,當情景出現時,你認爲最好處理這個問題嗎? – iamserious

+0

是的。處理您目前需要解決的問題。關注可能或不可能出現的問題是減緩發展的肯定方法。 –

3

讓用戶使用Javascript是一般來說,一個非常糟糕的主意。除非必須,否則不要這樣做。

我曾經有一個問題,我需要讓客戶端使用Javascript,但客戶端不一定是可信的,所以我修改了cofeescript,以便只有一小部分可編譯爲javascript,並且它工作得很好。這可能對你來說太過於矯枉過正。

你不應該讓你的用戶訪問cookies,這總是很痛苦。另外,如果您是HTML5人員之一,並且沒有localStorage或webSQL,並且沒有document.write(),因爲這是JSLint告訴您的另一種形式eval

而讓人們擁有javascript的問題是,即使您認爲自己擁有可信用戶,某人可能會得到一個密碼,並且您不希望該人訪問該組中的所有其他帳戶。

+0

噢,我沒有想過密碼,很可能密碼可能會錯位,因爲很多團體都是老年人的慈善團體,我們都知道他們如何寫下密碼(不,我們有人打電話我們在他們放錯了密碼錶之後;重置) – iamserious

+0

如果您有未受保護的javascript,不受信任的用戶可以竊取cookie。這將是XSS天堂。 –

1

自動識別某些JavaScript代碼是惡意還是沙箱化,這幾乎是不可能的。如果您不想讓黑客入侵您的網站,您只剩下幾個選項:

  1. 不允許用戶添加JavaScript。
  2. 只允許預定義的JavaScript代碼,例如Google Analytics(分析)。
  3. 在允許在網站上顯示之前,讓人類檢查所有自定義JavaScript。不要相信從第三方網站加載的腳本 - 這些腳本可能會從一天變爲另一天,並變爲惡意。
+0

一般建議,謝謝;但現在我們有大約60個團隊,並且在新的營銷團隊中,我們預計到明年(4月)將達到1000個。那麼,(1)讓用戶添加js(2)手動維護每個團隊將是災難性的。解? – iamserious

+0

@iamserious:然後解決方案2,讓他們只選擇預定義的JavaScript代碼。 –

+0

你會怎麼做那個弗拉基米爾? –

1

如果您沒有其他選擇,您可以考慮分離用戶javascripts(和cookie)的路徑/域。

例如你的用戶有頁面: user1.server.com 和你保持用戶的網頁在 user1.server.com

所以,如果你設置會話cookie來user1.server.com,它會使其無法從其他域的用戶腳本獲取(例如user2.server.com)。

另一個選項可能是在服務器JS引擎上執行所有用戶的JavaScript(從而控制它的所有I/O並限制對瀏覽器資源的訪問)。

無論如何,沒有簡單易行的解決方案,所以最好考慮使用其他答案的選項(例如預先編寫的腳本API,人工檢查)。

+0

嗨,我們事實上有''group1.domain.com'',''group2.domain.com''等我不是非常擔心跨組黑客(因爲它幾乎不可能與只是js),但只是相同的,有人可以決定成爲一個「明智的屁股」,並試圖竊取他們的用戶的餅乾。我的會話在服務器上,它再次無法獲取密碼,但擁有cookie,他們可以劫持會話並暫時使用它。 – iamserious

相關問題