2014-11-04 260 views
0

我使用HttpUtility.HtmlEncode來消毒用戶輸入以防止XSS攻擊。我的問題是,HtmlEncode將特殊字符(如ü)轉換爲它們的Html等效代碼。我找不到關於它做什麼和不編碼的文檔。然後爲了正確顯示這個給用戶我需要HtmlDecode它。使用HttpUtility.HtmlEncode和處理特殊字符/變音符號等

2個問題:

  1. 如何HtmlEncode決定它需要編碼理應有效字符像ü而不是其他Unicode字符像標準的英文字母字符。 HtmlEncode是否對所有非ascii字符進行編碼?什麼是防止腳本標記但允許特殊字符(如變音符號)而不創建特殊忽略列表的最佳方法?

  2. 是否使用HtmlDecode暴露的危險,因爲它被轉換回潛在的惡意的JavaScript

+0

「我的問題是,HtmlEncode轉換特殊字符」爲什麼這是一個問題?您的字符串應該顯示爲HTML源代碼(然後HtmlEncode是正確的)或顯示爲純文本(然後不使用HtmlEncode) – 2014-11-04 12:26:09

+0

它不會將英文字母編碼爲其HTML代碼.. – user48408 2014-11-04 13:13:27

+0

它不需要。請告訴我們您如何處理字符串以及它如何顯示給最終用戶。 – 2014-11-04 13:16:42

回答

1
  1. 的HTMLEncode()做兩個主要方面:
    1. 它處理的是不是一部分的任何字符默認的127個ASCII字符集。
    2. 它對可能被瀏覽器誤解爲有效的HTML,CSS或Javascript的字符進行編碼,以防止意外和故意改變網頁。
  2. 使用危險嗎?根據使用方法的不同,一切都可能會很危險。問題不是「你在解碼嗎?」而是「你在解碼用戶數據嗎?」。根據你對結果做什麼,使用它肯定會很危險。即使只顯示給客戶端也會導致XSS。

關於編碼和解碼有更多的關於編碼和解碼的信息比我在這裏可以寫得更多,而且之前的人已經對它做了比我更詳盡的解釋。 This article on preventing XSS in Asp.Net可以解釋你的XSS是什麼以及如何防止它。

+0

因此,HtmlEncode將處理的字符集是=任何非ASCII字符+任何可能被瀏覽器錯誤解釋的ASCII字符,如< >等? – user48408 2014-11-04 16:19:34

+0

@ user48408是的,正好。 – Nzall 2014-11-05 08:39:09

+0

假設這是正確的,我會將其標記爲答案。如果您有任何文件,請在評論中發帖 – user48408 2014-11-05 09:06:34