2012-03-04 28 views
2

我目前正在做一些XSS預防的研究,但我對基於DOM的攻擊有點困惑。大部分我已經讀過的關於該主題的論文給出了通過URL參數注入JavaScript來修改DOM(如果該值由JavaScript代替服務器端代碼呈現在頁面中)的示例。在現代瀏覽器中,基於DOM的XSS攻擊仍然可能嗎?

但是,似乎所有現代瀏覽器都會對通過URL參數給出的所有特殊字符進行編碼(如果通過JavaScript呈現)。

這是否意味着基於DOM的XSS攻擊無法執行,除非針對IE6等舊版瀏覽器?

+1

我很好奇 - 爲什麼這個問題投下來了? – 2012-03-06 07:18:16

回答

2

他們絕對有可能。如果您不過濾源自用戶的輸出,則該輸出可以是任何內容,包括腳本。瀏覽器無法知道它是否是您控制的合法腳本。

這不是現代瀏覽器的問題,它的基本原則是瀏覽器將來自您的域的每個內容視爲合法執行。

還有其他一些方面是確實阻塞(有時,不總是)由現代瀏覽器(雖然安全漏洞總是存在的),如跨域腳本,第三方資源獲取等

+0

我明白了,我想我已經略微誤解了DOM攻擊可以如何工作。我見過的所有示例都使用URL中的腳本標記,但是當我試圖複製它們的示例時,特殊字符會被編碼。基於DOM的攻擊繞過服務器端代碼還有哪些其他方法? – James 2012-03-04 14:23:05

+0

請看這些類型的攻擊:https://www.owasp.org/index.php/DOM_Based_XSS及其防範方法:https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet – 2012-03-04 14:30:01

+2

@Ofer Zelig - 我查看了這些鏈接,但他們的DOM攻擊示例不起作用,輸出會自動用JavaScript進行編碼。 從我讀過的論文看,服務器端的預防應該對基於DOM的攻擊無效。所以我想了解如何在沒有服務器干預的情況下完成這項工作。 – James 2012-03-04 14:58:38

2

忘掉那些OLD-學校的XSS從10年前開始採用。很久以前,通過從查詢參數中取消某些內容來編寫javascript來呈現頁面的程序員已經被解僱或者轉向角色/骨幹等框架。

但是,反映/存儲的XSS仍然廣泛存在。這需要從服務器端和客戶端進行適當的轉義。現代框架在渲染HTML時爲逃避敏感字符提供了很好的支持。例如,當從模型數據呈現視圖時,角度具有$ sce(嚴格上下文轉義)服務(https://docs.angularjs.org/api/ng/service/ $ sce)以解決可能的XSS威脅。骨幹模型也有類似「model.escape(attribute)」(http://backbonejs.org/#Model-escape)的方法來消除XSS威脅。