2010-02-25 50 views
11

通過簡單的轉換後面的( 「大5」):HTML編碼是否阻止XSS安全漏洞?

& -> & 
< -> &lt; 
> -> &gt; 
" -> &#034; 
' -> &#039; 

你將防止XSS攻擊?

我想你也需要在字符級別上白名單,以防止certain attacks,但following answer指出它過於複雜。

編輯page細節it does not prevent more elaborate injections, does not help with "out of range characters = question marks" when outputting Strings to Writers with single byte encodings, nor prevents character reinterpretation when user switches browser encoding over displayed page.實質上,只是逃避這些字符似乎是一個相當幼稚的方法。

+1

...維基百科說「值得一提的是,雖然它被廣泛推薦,只需進行HTML實體編碼五個重要的XML字符並不總是足以阻止許多形式的XSS。編碼可能會非常棘手,強烈建議使用安全編碼庫。「並援引這篇文章,但我無法找到該文章中的內容證明該聲明:http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet – 2010-02-25 15:18:04

+1

如果你不知道什麼你正在做或正在做不同的(錯誤的)地方。只要與它一致。在視圖圖層中重新顯示它們時,只編碼/轉義所有用戶控制的輸入(請求URL,請求參數,請求主體等等等等。源自用戶的所有內容)。就這樣。 – BalusC 2010-02-25 15:21:51

+0

嘿池 - 你願意改變首選答案嗎? @ bobince的回答更好,並且有更多的讚揚。 – nslntmnx 2015-12-02 00:16:15

回答

9

您是否會阻止XSS攻擊?

如果這個逃逸在正確的時間(*),然後是的,你會阻止HTML注入。這是XSS攻擊的最常見形式。這不僅僅是一個安全問題,無論如何你都需要進行逃生處理,這樣帶有這些字符的字符串將會正確顯示。安全問題是正確性問題的一個子集。

我認爲你需要白名單在人物等級也一樣,要防止某些攻擊

號HTML轉義將呈現的網頁上這些攻擊爲無效純文本的每一個,這是你想要的。該頁面上的攻擊範圍展示了不同的HTML注入方式,它可以避開某些服務器部署的stupider「XSS過濾器」,以防止常見的HTML注入攻擊。這表明「XSS過濾器」本質上是泄漏和無效的。

還有其他形式的XSS攻擊可能會影響到您,例如用戶提交的URI上的錯誤方案(javascript:等),將代碼注入到JavaScript塊中的數據中(您需要JSON-樣式表或HTTP響應標題(再次,當您將文本放入另一個上下文時,您總是需要適當的編碼形式;如果您看到任何帶有像"string $var string"這樣的非轉義內插的東西,您應該始終保持懷疑態度)。

然後是文件上傳處理,Flash來源策略,舊版瀏覽器中的UTF-8過長序列以及應用程序級內容生成問題;所有這些都可能導致跨站腳本。但HTML注入是每個Web應用程序都將面臨的主要問題,而且大多數PHP應用程序今天都會出錯。

(*:這是將文本內容插入到HTML中,並且沒有其他時間。在腳本開始時,不要HTML轉義表格提交數據$_POST/$_GET;這是一個常見的錯誤標題。 )

+0

就是這樣。 – BalusC 2010-02-25 15:28:03

4

反措施取決於插入數據的上下文。如果將數據插入到HTML中,則使用轉義序列(即字符引用)替換HTML元字符會阻止插入HTML代碼。

但是,如果你在另一個上下文中(例如HTML屬性值被解釋爲URL),你有其他元字符不同的轉義序列,你必須處理。