防止输入Html标记的方法

来源:互联网 发布:淘宝有什么好的内衣店 编辑:程序博客网 时间:2024/05/29 18:55

从客户端中检测到有潜在危险的 Request.Form 值
原因:由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值,于是乎报错上面的错误。
解决办法:
解决方案一:
在.aspx文件头中加入这句:
<%@ Page validateRequest="false"  %>
解决方案二:
修改web.config文件:
<configuration>
  <system.web>
    <pages validateRequest="false" />
  </system.web>
</configuration>
因为validateRequest默认值为true。只要设为false即可。
当然,这样只能是让界面好看一些,要想抵制注入,还得从过滤上做足功夫
然后,还是有不禁用validateRequest的方法的,如下
解决方案三:

不禁用validateRequest=false。
  正确的做法是在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。
  举例而言,处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码: 
以下是引用片段:
protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("请您输入合法字符串。");
Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。
}
}

解决方案四:

过滤法:

public string checkStr(string html)   
      {   
          System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<mce:script[/s/S]+</script *><!--
", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[/s/S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" no[/s/S]*=", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"<iframe[/s/S]+</iframe *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"<frameset[/s/S]+</frameset *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          System.Text.RegularExpressions.Regex regex6 = new System.Text.RegularExpressions.Regex(@"/<img[^/>]+/>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);    
          System.Text.RegularExpressions.Regex regex7 = new System.Text.RegularExpressions.Regex(@"</p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          System.Text.RegularExpressions.Regex regex8 = new System.Text.RegularExpressions.Regex(@"<p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          System.Text.RegularExpressions.Regex regex9 = new System.Text.RegularExpressions.Regex(@"<[^>]*>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);   
          html = regex1.Replace(html, ""); //过滤<script>
// --></mce:script>标记   
          html = regex2.Replace(html, ""); //过滤href=JavaScript: (<A>) 属性   
          html = regex3.Replace(html, " _disibledevent="); //过滤其它控件的on...事件   
          html = regex4.Replace(html, ""); //过滤iframe   
          html = regex5.Replace(html, ""); //过滤frameset   
          html = regex6.Replace(html, ""); //过滤frameset   
          html = regex7.Replace(html, ""); //过滤frameset   
          html = regex8.Replace(html, ""); //过滤frameset   
          html = regex9.Replace(html, "");   
          html = html.Replace(" ", "");   
          html = html.Replace("</strong>", "");   
          html = html.Replace("<strong>", "");   
          return html;