2010-06-15 14 views
2

是否以任何方式禁止瀏覽器在塊/節/元素內執行腳本?在特定塊/ div(包含可疑HTML)中禁用JavaScript?

我的情況是,我讓我的(未來)的用戶打造「豐富的內容」(使用CK-編輯器)。 內容是西港島線後顯示給其他用戶 - 所有暗示的危險:XSS,重定向,身份竊取,垃圾郵件,哪些不是......

我,或多或少,放棄了試圖「消毒」了進來的XHTML,看到有多少認識的‘攻擊向量’有:http://ha.ckers.org/xss.html

什麼我真正需要的是這樣的:

< DIV ID =‘userContent’> < scriptOFF>

嫌疑HTML

</scriptOFF> </DIV>

回答

3

理想的方式是不接受來自最終用戶的HTML/JavaScript的。如果你對這個限制沒有問題,你只需要根據適當的上下文來確定你的encode the output。不要重新發明輪子,只是使用現有的庫來達到這個目的。

但如果你必須接受HTML,使用圖書館像OWASP's ANTI-SAMYHTML Purifier。他們正是爲此目的而建造的。

+0

它是HTML淨化器 - 並且完美地工作(據我所見):) - 也是OWASP推薦的。 – T4NK3R 2010-06-22 20:36:36

3

你必須淨化輸入,也沒有辦法選擇禁用javascript,我知道的。

它使用允許標籤的白名單,而不是黑名單是很重要的。這樣就可以安全地做到這一點。

1

是的,但是這將「白名單」將是巨大的 - 我遠遠不夠主管察覺的細微漏洞,ALA這裏描述:http://ha.ckers.org/xss.html

這將需要一個「社區工作」 - 看着HTML淨化器(http://htmlpurifier.org)現在......

我只是認爲這將是巨大的,有這樣的標籤,以防止XSS「載體」

  • 能「人當道」的99%請說服瀏覽器製造商實施它:)

編輯: 好的。它是HTML淨化器! - 感謝大家的回答:)

+1

瀏覽器實施者* *是考慮它 - 搜索「HTML5的iframe沙盒」。它需要數年時間才能普及,到那時攻擊者會轉移到其他瀏覽器漏洞。 – 2010-06-15 11:58:21

+0

安全性應該(幾乎)不會在客戶端執行!如果有人使用尚不支持此功能的舊版瀏覽器訪問您的網站會發生什麼情況? – 2010-06-15 12:00:35

1

即使你使用了「無腳本」標籤或「文本區域」標籤的窗臺XSS。什麼讓攻擊者避免注入結束標籤?

< div id="userContent">< scriptOFF> 

<?=$_GET['xss']?> 

< /scriptOFF>< /div> 

,但它仍然XSS:

http://localhost/xss.php?xss=< /scriptOFF>< /div> <script> alert(/still_xss/) </script> 
0

沒有,但話又說回來,你絕對不能讓你的用戶能夠手動供代碼到擺在首位的頁面。

不要試圖淨化Javascript;不允許使用Javascript。實際上,根本不允許HTML。編寫自己的有限標記語言(ala BBCode),或者如果你真的需要,可以選擇少量的HTML標籤。

即與您的安全努力相加而不是減法。

1

@sri提到哪裏可以找到「html5 iframe沙箱」信息, here is a test script

你應該看到的是「瀏覽器支持iframe沙盒屬性:)」你是在Chromium中查看。

也可能在基於khtml/webkit的瀏覽器(如手機瀏覽器)中獲得積極的結果。 Opera 11,Firefox 3.6和Firefox4尚未實現sandbox屬性。

的文章,解釋在gnubyexample.blogspot.com背景和當前狀態