代码改变世界

[Exception]Sys.WebForm.PageRequestManagerServerErrorException:500

2013-04-13 14:06  Hejin.Wong  阅读(1525)  评论(0编辑  收藏  举报

异常:

Sys.WebForm.PageRequestManagerServerErrorException:在服务器上处理请求时出现未知错误。服务器返回的状态码为500  

问题:

项目中一个页面用到了富文本编辑器,当使用颜色字体大小等选项时,提交表单页面就会抛出异常。(只是输入简单的文本,不能换行,提交表单成功)。


调试:

1、在页面文件的Page标签里加上ValidateRequest="false"的属性值  此方法对于没有显著页面元素错误(有潜在危险、但非不可执行)的程序是可以的,前提是你不需要考虑防范页面脚本攻击等危及程序安全的因素。或在配置文件web.config的system.web节下添加“<pages  ValidateRequest="false" />”元素 ,不同的是作用域扩大到了受此配置文件影响所有页面文件。

 

2、为页面的ScriptManager控件添加EnablePartialRendering="false"的属性 将详细的页面错误显示出来。

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

ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个 HttpRequestValidationExceptioin。

问题已找到:使用富文本编辑器时,就会提交些带有HTML标签的字符串。

 

3、设置web.config中httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0",否则即使设置了validaterequest="false"也会提示检测到有潜在危险的Request.Form 值的错误。设置此值后,可通过在 Page 指令或 <pages> 配置节中设置 validateRequest="false" 禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。

属性 requestValidationMode 

获取或设置一个版本号,该版本号指示将使用哪种 ASP.NET 版本特定的验证方法。 未验证分配给此属性的值是否匹配特定版本的 ASP.NET。 
任何小于 4.0(例如 3.72.92.0)的数值将被解释为 2.0。
任何大于 4.0 的数值将被解释为 4.0。 默认值为 4.0

 

(本文只是解决异常问题,不是最好的解决方法,如何最大限度的预防XSS,请自行搜索。)