2010-09-02 43 views
5

我在ASP.NET Web窗體中有幾個文本框。我想確保用戶在輸入HTML到這些文本框中輸入了而不是。但是,我不確定如何防止輸入HTML。因此,我決定只允許字母數字字符,空格,感嘆號,尖號,美元符號,百分號,插入符號,星號和左右括號。我忽略了&符號,因爲我不想讓他們輸入類似於「<腳本&rt; ...」的文件。「如何防止HTML進入ASP.NET Web窗體文本框

我該如何做?我是否正確地做這件事?

謝謝!

+0

無論您選擇什麼方法,請確保您在客戶端和服務器上驗證您的輸入 - 客戶端驗證可以輕鬆繞過javascript調試器。 – 2010-09-02 20:23:31

回答

1

看一看這裏 http://msdn.microsoft.com/en-us/library/ff649310.aspx

你可以把毯子聲明web配置ValidateRequest = true,將檢查所有的用戶輸入,如果用戶插入壞字的東西拋出一個錯誤。

如果你需要允許一些html標籤,那麼你將需要推出自己的。

+0

+1內置...(處理錯誤當然)。 – 2010-09-06 19:40:56

+0

-1:我不認爲向用戶拋出錯誤/例外是一種好的做法。而ValidateRequest = true並不包括所有形式的XSS預防,如果這是意圖。 – 2010-09-08 13:48:28

+0

@Caspar Kleijne能否提供一些對ValidateRequest的引用,而不是涵蓋所有形式的XSS?我很想知道這件事。我認爲微軟在抓住所有危險的用戶輸入案例方面會做得比我/一般的開發人員更好。 – 2010-09-09 21:15:39

1

默認情況下,該頁面將阻止用戶在文本框或textareas中發佈HTML或腳本。見MSDN

0

可以使用的方法來清潔HTML代碼從入門像:

public static string ClearHTML(string Str, Nullable<int> Character) 
{ 
    string MetinTxtRegex = Regex.Replace(Str, "<(.|\n)+?>", " "); 

    string MetinTxtSubStr = string.Empty; 

    if (Character.HasValue) 
    { 
     if (MetinTxtRegex.Length > Character) 
     { 
      MetinTxtSubStr = MetinTxtRegex.Substring(0, Character.Value); 
      MetinTxtSubStr = MetinTxtSubStr.Substring(0, MetinTxtSubStr.LastIndexOf(" ")) + "..."; 
     } 
     else 
     { 
      MetinTxtSubStr = MetinTxtRegex; 
     } 
    } 
    else 
    { 
     MetinTxtSubStr = MetinTxtRegex; 
    } 
    return MetinTxtSubStr; 
} 
0

我用:

HttpUtility.HtmlEncode(); 

更多信息here