【问题标题】:a potentially dangerous request.form value was detected but validateinput(false) not working检测到潜在危险的 request.form 值但 validateinput(false) 不起作用
【发布时间】:2013-12-23 06:36:02
【问题描述】:

我已经安装了 VS2010 和 MVC2 并使用 tinyMCE 测试了一个简单的表单。当我在 tinyMCE 中发布 textarea 的内容时,我得到了可怕的 YSD 和消息

“一个潜在的危险......”

我以前见过这个,所以我把 ValidateInput(false) 放在控制器上,但不高兴 - 我仍然收到错误。

edit.aspx 中的页面代码为:

    <% using (Html.BeginForm()){ %>

    <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
    <textarea id="elm1" name="mceText" rows="15" cols="80" style="width: 80%">
        &lt;p&gt;
            This is some example text that you can edit inside the
  &lt;strong&gt; TinyMCE editor&lt;/strong&gt;.
    </textarea>

    <br />
    <input type="submit" name="save" value="Submit" />
    <input type="reset" name="reset" value="Reset" />
<%} %>

控制器动作是:

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateInput(false)]
    public ActionResult Edit(string mceText)
    {

        return View();
    }

任何想法 - (我知道代码不完整)已经尝试了几个小时,但每个人都只是说要使用 ValidateInput(false)

【问题讨论】:

  • 通过将 放入 web.config 来全局禁用它时是否有效?
  • 感谢您的建议,但这不起作用。我读了 Phil Haack 的评论说它在 web.config 中为时已晚,因为控制器代码已经运行。

标签: asp.net-mvc-2


【解决方案1】:

这就是为什么:http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#0.1__Toc256770147

ASP.NET 中的请求验证功能提供了一定程度的 针对跨站点脚本 (XSS) 攻击的默认保护。在 以前版本的 ASP.NET,请求验证由 默认。但是,它仅适用于 ASP.NET 页面(.aspx 文件和 它们的类文件)并且仅在这些页面正在执行时。

在 ASP.NET 4 中,默认情况下,为所有用户启用请求验证 请求,因为它在 BeginRequest 阶段之前启用 HTTP 请求。因此,请求验证适用于 所有 ASP.NET 资源,而不仅仅是 .aspx 页面请求。这包括 Web 服务调用和自定义 HTTP 处理程序等请求。要求 当自定义 HTTP 模块正在读取 HTTP 请求的内容。

因此,请求现在可能会出现请求验证错误 以前没有触发错误。恢复到行为 ASP.NET 2.0 请求验证功能,添加以下设置 在 Web.config 文件中:

<httpRuntime requestValidationMode="2.0" />

但是,我们建议您分析任何请求验证错误 确定现有的处理程序、模块或其他自定义代码 访问可能是 XSS 攻击的潜在不安全 HTTP 输入 向量。

【讨论】:

    【解决方案2】:

    更好的解决方案可能是使用 tinymce 编码选项:

    http://www.tinymce.com/wiki.php/Configuration:encoding

    tinyMCE.init({
            ...
            encoding : "xml"
    });
    

    然后根据需要使用 HttpUtility.HtmlDecode 对其进行解码。

    请看这里http://blog.tentaclesoftware.com/archive/2010/07/22/96.aspx

    【讨论】:

    • 老兄!完美的!感谢您发布此内容。
    【解决方案3】:

    找到了。

    需要加&lt;httpRuntime requestValidationMode="2.0"/&gt;

    在 web.config 中

    【讨论】:

    • 答案没有出现它应该说
    【解决方案4】:

    仅使用 : encoding: "xml" 单引号被编码为 : ' 但 ASP.NET 验证将其视为安全漏洞,我们必须将所有 ' 替换为 html &amp :

    tinyMCE.init({
     // ...
     encoding: "xml",
     setup: function (ed) {
     ed.onSaveContent.add(function (ed, o) {
     o.content = o.content.replace(/&#39/g, "&apos");
     });
     }
    });
    

    谢谢埃迪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2011-03-07
      • 2016-03-21
      • 1970-01-01
      相关资源
      最近更新 更多