相关疑难解决方法(0)

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

每当用户在我的Web应用程序中发布包含<>在页面中的内容时,我都会抛出此异常.

我不想进入关于抛出异常或崩溃整个Web应用程序的聪明性的讨论,因为有人在文本框中输入了一个字符,但我正在寻找一种优雅的方法来处理这个问题.

捕获异常并显示

发生错误请返回并重新输入整个表单,但这次请不要使用<

对我来说似乎不够专业.

禁用post validation(validateRequest="false")肯定会避免此错误,但它会使页面容易受到许多攻击.

理想情况:当发回包含HTML限制字符的回发时,Form集合中的已发布值将自动进行HTML编码.所以.Text我的文本框的属性将是something & lt; html & gt;

有没有办法可以从处理程序中执行此操作?

asp.net validation asp.net-mvc html-encode request.form

1437
推荐指数
32
解决办法
94万
查看次数

ValidateInput(false)vs AllowHtml

我有一个用于创建备忘录的表单,为此我使用富文本编辑器来提供一些样式,这会创建html标签以便应用样式.当我发布该文本时,mvc会抛出错误以防止可能存在危险的脚本,因此我必须特别允许它.

我找到了两种方法,一种是用装饰控制器方法,另一种是用[ValidateInput(false)]它来装饰ViewModel属性[AllowHtml].对我来说,[AllowHtml]看起来更好,但我只发现这种方法使用了1次,[ValidateInput(false)]似乎是首选方式.

我应该使用哪种方法,两者之间有什么区别?

viewmodel richtext asp.net-mvc-4

46
推荐指数
1
解决办法
4万
查看次数

AllowHtml不起作用

我正在构建一个内容管理系统,允许我以外的人更新网站上的内容.

我有一个面向前面的HTML表单,通过AJAX将数据发送到控制器:

// CONTROLLER
[ValidateInput(false)]
public void CarAJAX()
{
    CarAdmin CA = new CarAdmin();
    CA.UpdateCar(System.Web.HttpContext.Current.Request);
}
Run Code Online (Sandbox Code Playgroud)

这些数据将包含HTML,因此我的模型中出现错误:

// MODEL
using System;
using System.Web;
using System.Web.Mvc;

namespace Site.Models
{
    public class CarAdmin
    {
        public String id { get; set; }
        [AllowHtml]
        public String HTML_Stuff { get; set; }

        public CarAdmin(){}

        public void UpdateCar(HttpRequest Request)
        {
            HTML_Stuff = Request.Form["HTML_Stuff"]; // <-- ERROR HAPPENS HERE!!!!!!

            // sanitation and validation

            String Select = String.Format("UPDATE Car Set HTML_Stuff = {0} WHERE id = {1}", HTML_Stuff, …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-4

6
推荐指数
1
解决办法
3322
查看次数

由OutputCache过滤器引起的潜在危险请求

我在MVC3应用程序中看到了一个奇怪的行为.我有一个由Ajax调用的Action,并收到一个带有HTML文本的帖子.我想允许输入HTML,所以我设置了ValidateInput(false)属性.我还有一个带有以下参数的全局OutputCache过滤器:(NoStore = true,Duration = 0,VaryByParam ="*")
代码如下所示:

[HttpPost]
[ValidateInput(false)]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*" )]
public ActionResult Edit(SomeModel someModel)
{
   saveModel(someModel);
   return new AjaxEditSuccessResult();
}
Run Code Online (Sandbox Code Playgroud)

当我向该方法发送帖子时,它会被执行并保存模型,但我得到的响应是标准的"从客户端检测到一个潜在危险的Request.Form值"错误消息,带有此栈跟踪:

[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (text="<p class="MsoNormal"...").]
System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +9665149
System.Web.<>c__DisplayClass5.<ValidateHttpValueCollection>b__3(String key, String value) +18
System.Web.HttpValueCollection.EnsureKeyValidated(String key) +9664565
System.Web.HttpValueCollection.Get(String name) +17
System.Web.Caching.OutputCacheModule.CreateOutputCachedItemKey(String path, HttpVerb verb, HttpContext context, CachedVary cachedVary) +676
System.Web.Caching.OutputCacheModule.CreateOutputCachedItemKey(HttpContext context, CachedVary cachedVary) +55
System.Web.Caching.OutputCacheModule.OnLeave(Object source, EventArgs eventArgs) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3

4
推荐指数
1
解决办法
1672
查看次数