System.Web.HttpRequestValidationException: 从客户端(newscontent="<span style="font-si...")中检测到有潜在危险的 Req

写在前面的话:本人在开发过程中使用富文本编辑器开发文章发布功能时候,保存带格式的文章内容到服务器时遇到了这种错误类型,网上一搜索解决办法满天飞的就是:

1.关闭验证<httpRuntime requestValidationMode="2.0"/>和2. ASP.NET添加<pages validateRequest="false">以及MVC的控制器的action方法前面添加 [ValidateInput(false)]和在web.config配置节点中添加:
 <system.web>
<httpRuntime requestValidationMode="2.0" />  </system.web>,本人在实际实验的时候,根本不行,很容易误导人,而且很不科学。

“/”应用程序中的服务器错误。

从客户端(newscontent="<span style="font-si...")中检测到有潜在危险的 Request.Form 值。

说明: ASP.NET 在请求中检测到包含潜在危险的数据,因为它可能包括 HTML 标记或脚本。该数据可能表示存在危及应用程序安全的尝试,如跨站点脚本攻击。如果此类型的输入适用于您的应用程序,则可包括明确允许的网页中的代码。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=212874。 

异常详细信息: System.Web.HttpRequestValidationException: 从客户端(newscontent="<span style="font-si...")中检测到有潜在危险的 Request.Form 值。

源错误: 

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪: 

[HttpRequestValidationException (0x80004005): 从客户端(newscontent="<span style="font-si...")中检测到有潜在危险的 Request.Form 值。]
   System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +9850840
   System.Web.<>c__DisplayClass280_0.<ValidateHttpValueCollection>b__0(String key, String value) +22
   System.Web.HttpValueCollection.EnsureKeyValidated(String key) +9848837
   System.Web.HttpValueCollection.GetValues(Int32 index) +29
   System.Collections.Specialized.NameValueCollection.Add(NameValueCollection c) +84
   System.Web.Mvc.FormCollection..ctor(ControllerBase controller, Func`1 validatedValuesThunk, Func`1 unvalidatedValuesThunk) +69
   System.Web.Mvc.FormCollectionModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +129
   System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +295
   System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +105
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) +445
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129
   System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +302
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129
   System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +338
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129
   System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +316
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +251
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.7.2117.0

    错误详情截图如下:


本人做的是基于.NET MVC的开发,采取办法是:

1. 只关闭需要关闭的action方法即在对应的方法上添加 [ValidateInput(false)]

2. 将窗体form接收的含有“<span >,font,.......”等等html标记的string进行HTML编码 string content = Server.HtmlEncode(form["content"]);,从数据库回显的时候使用Server.HtmlDecode进行解码即可。

本人小白,但验证此方法确实可行。大神可以忽略!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值