我試圖開發一個安全的Web應用程序,它可以接受表單數據,將其編碼到數據庫中以消除跨站點腳本問題,然後在其他網頁上很好地格式化它。HttpUtility.HtmlEncode,HttpUtility.HtmlDecode,AntiXSS庫和正確格式化用戶輸入的輸入
表單數據被使用
HttpUtility.HtmlEncode('It's my wedding!')
是有人進入這個工作的一個例子編碼「這是我的婚禮!」到一個文本框。這進入數據庫格式爲:
它'是我的婚禮!
如果我從數據庫中提取出來並使用.NET文本控件顯示它,則顯示的內容與此完全相同,撇號仍保留在屏幕上。
Web瀏覽器將&解釋爲&符號並©解釋爲版權符號 - 爲什麼他們不將代碼'解釋爲撇號?
說我再使用:
HttpUtility.HtmlDecode('It's my wedding!');
這將理清我的撇號問題,但如果我使用時,有人已經成功注入惡意的JavaScript進入這一領域,如HtmlDecode方法:
It's my wedding!<script type="text/javascript">alert('XSS!');</script>
它也將解碼編碼的JavaScript,並執行攻擊。如果是這種情況,爲什麼我們首先使用HttpUtility.HtmlEncode()?
我見過有人在使用Microsoft AntiXss庫http://wpl.codeplex.com/,但由於用戶無法修改它提供的白名單,它似乎正在接受有關其質量和有效性的可怕評論。
你應該怎麼做才能安全地對HTML進行編碼並允許它在顯示的同時還能防止XSS攻擊?剝離/編碼標籤是唯一的解決方案嗎?
以前大家怎麼處理過這個?
謝謝!
卡爾
一個快速評論。您將其保存在數據庫上,然後將其打印在編碼的網頁上。 – Aristos 2013-02-28 09:29:56