客户端检测到有潜在危险错误

来源:互联网 发布:网络配置实例 编辑:程序博客网 时间:2024/04/28 15:50

      近段时间,很多的同学在做项目过程中遇到这样的问题:在输入文本框内录入javascript脚本时,结果报错。错误提示如下:

     

      个人总结了一下,有以下几种解决方案:
      1.在web.config文档<system.web>后面添加下面这条语句即可。
              <pages validaterequest="false"/>
      2.在*.aspx文档头的page中加入validaterequest="false"。

      其实这样做是不正确的,会给程序安全带来风险。
      ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个 HttpRequestValidationExceptioin。这是ASP.Net提供的一个很重要的安全特性。因为很多程序员对安全没有概念,甚至都不知道XSS这种攻击的存在,知道主动去防护的就更少了。ASP.Net在这一点上做到默认安全。这样让对安全不是很了解的程序员依旧可以写出有一定安全防护能力的网站。
     正确的做法是在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面。
     a.在页面添加Page_Error()函数
     protected void Page_Error(object sender, EventArgs e)
     {
          Exception ex = Server.GetLastError();
          if (HttpContext.Current.Server.GetLastError() is HttpRequestValidationException)
          {
                 HttpContext.Current.Response.Write("请输入合法的字符串【<a href=/"javascript:history.back(0);/">返回</a>】");
                 HttpContext.Current.Server.ClearError();
          }
     }
     b.修改Global.asax文件,在Application_Error()中添加以下代码
     Exception ex = Server.GetLastError();
     if (HttpContext.Current.Server.GetLastError() is HttpRequestValidationException)
     {
           HttpContext.Current.Response.Write("请输入合法的字符串【<a href=/"javascript:history.back(0);/">返回</a>】");
           HttpContext.Current.Server.ClearError();
     }
     这段代码很简单,所以我希望所有不是真的要允许用户输入之类字符的同学,千万不要随意的禁止这个安全特性,如果只是需要异常处理,那么请用类似于上面的代码来处理即可。
     而对于那些通过明确禁止了这个特性的同学,自己一定要明白自己在做什么,而且一定要自己手动的检查必须过滤的字符串,否则你的站点很容易引发跨站脚本攻击。

原创粉丝点击