2011-09-03 196 views
1

1)I得到響應HTML標記,例如:這是<b>Test</b>如何解決JavaScript上的XSS漏洞?

2)有時響應可以containt腳本(或iframe,帆布等)標籤(XSS),例如:This <script>alert("Hello from XSS")</script> is <b>Test</b>

3)除了其他html標籤,如何刪除所有XSS標籤(script,iframe,canvas ...)?

PS:我不能使用轉義,因爲它刪除了<b>,<strong>和其他標籤。

+0

參見[措施(前像Twitter的一個數天)防止XSS漏洞(http://stackoverflow.com/questions/816224/measures-to-prevent-xss-vulnerability-like-twitters-one-a-days-before-before)和[是否有一個JavaScript庫可用於過濾XSS攻擊的字符串?] http://stackoverflow.com/questions/884209/is-there-a-javascript-library-which-can-be-used-to-filter-out-strings-for-xss-att) –

+0

有*很多*你需要處理;嘗試看一下http://html5sec.org以瞭解許多XSS(以及其他類似的東西)的形狀和大小。進入*的白名單允許更安全。 –

回答

4

如何刪除除了其他html標籤之外的所有XSS標籤(腳本,iframe,canvas ...)?

全部標籤可能存在XSS風險。例如<b onmouseover="...">,<a href="javascript:..."><strong style="padding: expression(...)">

要呈現HTML「安全」,您需要將其過濾爲僅允許一組最小的已知安全元素和屬性。所有的URL屬性都需要進一步檢查已知好的協議。這被稱爲「白名單」。

這不是一個簡單的任務,因爲您通常必須正確解析HTML以檢測哪些元素和屬性存在。一個簡單的正則表達式不足以提取潛在麻煩內容的範圍,尤其是在具有相對有限的正則表達式引擎(不存在後視,不可靠的前瞻等)的JavaScript中。

有一些服務器端語言的工具可以爲你做這件事,例如PHP的HTML淨化器。我建議在返回內容之前在服務器端使用其中的一個,因爲目前我還沒有意識到這種JavaScript的優秀庫。

1

你不需要刪除標籤,只需做翻譯。 例如,轉<&lt;>&gt;等。

如果你正在使用PHP,一些功能是這樣的:

htmlspecialchars

htmlentities

+0

由於除腳本標記外,還有b,strong,i和其他,並且它們仍然保持完整,因此無法<轉至<,>至> – cackle

0

以下函數可用於編碼輸入數據修復XSS漏洞JavaScript的

/*Using jQuery : the script to escape HTML/JS characters*/ 
function htmlEncode(value) { 
    if (value) { 
     return $('<div/>').text(value).html(); 
    } else { 
     return ''; 
    } 
}