2009-09-29 53 views
2

我正在研究StackQL.net,它只是一個簡單的網站,它允許您在StackOverflow公共數據集上運行ad hoc tsql查詢。這是醜陋的(我不是一個平面設計師),但它的作品。HTMLEncode script tags only

我做的選擇之一是我做不是想要html編碼後期主體的全部內容。這樣,您可以看到查詢中帖子的一些格式。它甚至會載入圖像,我很好。

但我擔心這也會使<script>標記處於活動狀態。有人可能會在堆棧溢出答案中植入惡意腳本;他們甚至可以立即刪除它,所以沒有人看到它。人們在第一次訪問時嘗試的最常見的問題之一就是簡單的Select * from posts,因此稍微有點時間,這樣的腳本最終可能會在幾個人的瀏覽器中運行。在我更新到(希望即將發佈的)10月份數據導出之前,我想確保這不是問題。

什麼是最好,最安全確保腳本標籤最終編碼的方法?

回答

3

您可能需要修改HTMLSanatize script以符合您的目的。它由Jeff Atwood編寫,允許顯示某些類型的HTML。既然它是爲堆棧溢出編寫的,它也適合你的目的。

我不知道它是否與Jeff目前部署的「最新」,但這是一個很好的起點。

+0

這很可能最終會成爲公認的答案,但直到本週末我纔會嘗試。 – 2009-10-01 13:24:37

2

不要忘記onclickonmouseover等或javascript:僞網址(<img src="javascript:evil!Evil!">)或CSS(style="property: expression(evil!Evil!);")或...

有超越簡單的腳本元素攻擊媒介的主機。

執行white list,而不是黑名單。

0

簡單地打破<script>標籤呢?對於該標籤,只跳出<>,最後以&lt;script&gt;結束,這可能是一種簡單而簡單的方法。

當然鏈接是另一個向量。您還應該禁用href='javascript:'的每個實例,並且每個屬性都以on *開頭。

可以肯定的是,它可以從軌道上消除它。

+0

替換< and >會打破我想允許的其他格式。 – 2009-09-29 13:45:52

+0

@Joel Coehoorn:替換

0

但我擔心這也會使<script標記處於活動狀態。

哦,這只是HTML'惡意內容'的開始,它可能會導致跨站點腳本。還有事件處理程序;內聯,嵌入和鏈接的CSS(表達式,行爲,綁定),Flash和其他可嵌入的插件,iframes來利用網站,javascript:和其他危險方案(有超出你的想象!)在每個可以接受URL,元刷新,UTF-8溢出,UTF-7錯誤嗅探,數據綁定,VML和其他非HTML東西,破解標記解析爲允許的瀏覽器腳本的地方...

簡而言之,任何通過簡單的正則表達式來清理HTML的快速修復嘗試都會失敗。

要麼逃避一切,以便任何HTML以純文本形式顯示,或使用完整的基於解析器和白名單的sanitiser。 (並保持最新狀態,因爲即使這是一項艱鉅的工作,並且經常會在其中發現新的洞)。

但是您是否使用與SO本身相同的Markdown系統來呈現帖子?這將是顯而易見的事情。我不能保證在Markdown中沒有任何可以允許跨站腳本的漏洞(過去肯定有過,而且可能還有一些比較複雜的系統仍然存在)。但至少你不會比沒有更安全的!

+0

是的,我想我會用George提出的Html Sanitize腳本。 – 2009-09-29 14:59:04