从客户端检测到有潜在危险的Request.Form

  初学.net的朋友可能经常遇见 从客户端检测到有潜在危险的Request.Form 的问题。本人同样也是。遇到问题不能解决的话一般都是上网寻求帮助。而我在网上经常看到的解决方法是设置validateRequest=false,来禁用这个。说实话我刚开始用这方法的时候,“从客户端检测到有潜在危险的Request.Form“的错误就不在出现了。输入<aa>之类的符号也没有事了,还用经常使用。

  其实这个方法是不对的,如果你禁用了这个功能,但是自己却不手动去过滤那些非法字符的话,那网站的安全性将降低。当初我禁用丢这个功能,原因无非就是不想看到类似于”从客户端检测到有潜在危险的Request.Form“的错误,而且我当初也不知道我禁用掉的是什么功能。用页面不报错的方式来体现自己做的网站“安全性”。

  报出这类错误其实是.net的一个安全机制,用来防止跨站脚本攻击。不过你非要输入<a>之类的话,禁用此功能我就不多说什么了。如果是因为不喜欢这种报错方式而禁用掉该功能,那方法就错了。在页面上显示这类错误的原因是因为用户没有进行异常处理,错误就直接在页面上显示了。捕捉这类异常的代码很简单,在页面加上一下代码就可以了。

protected void Page_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        if (ex is HttpRequestValidationException)
        {
            Response.Write("非法字符");
            Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。
        }
    }

写完之后,当用户输入<a>这类的符号时,就不会报出 从客户端检测到有潜在危险的Request.Form 的错误提示了。而是执行if中的代码。输出"非法字符”。

  这是在网上看了别人的博客后得到的代码,在这里就分享一下,希望大家,也希望自己在学习编程的时候不要盲目相信网上的答案,理解实质的东西才是最重要的。

 

 

 

 

posted @ 2012-12-24 01:36  别人看不见····  阅读(190)  评论(0)    收藏  举报