2010-09-02 53 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