新闻发布系统看了有一段时间了,很少遇到棘手的问题,基本上遇到最多的就是浏览器的兼容问题。
不过,在今天遇到了一个关于freeTextBox的安全问题。也就是用freeTextBox来添加新闻内容的时候,弹出如下警告:
出错内容:
从客户端(ContentPlaceHolder1_M_ContentPlaceHolder_ftbContent="ff<STRONG>ff</STRONG>")中检测到有潜在危险的 Request.Form 值。
说明:请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击。若要允许页面重写应用程序请求验证设置,请将 httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" />。设置此值后,可通过在 Page 指令或 <pages> 配置节中设置 validateRequest="false" 禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkId=153133。异常详细信息: System.Web.HttpRequestValidationException: 从客户端(ContentPlaceHolder1_M_ContentPlaceHolder_ftbContent="ff<STRONG>ff</STRONG>")中检测到有潜在危险的 Request.Form 值。
先说一下,我的处理过程:
其实我们可以从出错信息中找到一些信息,我的做法:
首先在页面中加入这句话:
ValidateRequest="false"
结果发现错误依旧,那么,再看出错信息,我们看到了这句话:请将 httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" />。
然后再Web.config文件中做如下配置:
问题解决了!!!!
下面我们来总结一下:
一、分析原因:
ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。
当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个
HttpRequestValidationExceptioin。也就是说,页面请求(request)时,含
有html或javascript等字符串时。ASP.NET会认为是危险的值,就会抛出辞异常。
当页面上使用了所见即所得编辑器(例如使用了fckeditor或FreeTextBox控件等)
的时候会发生此异常。
二、ASP.net4.0请求验证模式发生变化
参见:http://space.itpub.net/14466241/viewspace-669557
三、大家可以看一下这个官方的帮助文档,会对大家对这个问题的认识有所帮助的:
http://www.asp.net/whitepapers/request-validation
其实讲解了这个安全验证的由来,以及作用。
请大家注意一下这里:
其中讲到了如果取消了这个安全验证的话,而且想存储content的话,那么就需要对其进行编码工作。
本人也是刚刚接触asp.net,希望大家留下您的宝贵意见!!!!