【问题标题】:Validation detected dangerous client input - post from TinyMCE in ASP.NET验证检测到危险的客户端输入 - 来自 ASP.NET 中 TinyMCE 的帖子
【发布时间】:2009-08-04 02:21:09
【问题描述】:

当我在 ASP.NET MVC 视图中从 TinyMCE 发帖时收到此错误。

错误:

请求验证检测到有潜在危险的客户端输入值,请求处理已中止

通过谷歌搜索,它说只需在我所做的顶部的 Page 指令中添加一个 validateRequest,但我仍然收到此错误。如您所见,以下是我在视图中的代码:

<%@ Page validateRequest="false" Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

【问题讨论】:

    标签: asp.net-mvc scripting tinymce


    【解决方案1】:

    试试这个解决方案。只需添加到 TinyMce 控件

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

    http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/encoding

    http://blog.tentaclesoftware.com/archive/2010/07/22/96.aspx

    【讨论】:

    • 不幸的是 tinymce 4 似乎已经放弃了这个
    【解决方案2】:

    尝试在您的模型中使用[AllowHtml] 属性。

    class MyModel{
     [AllowHtml]
     public string Content{get;set;}
    }
    

    【讨论】:

      【解决方案3】:

      使用装饰器[ValidateInput(false)]

      然后您将需要编写一个 HTMLEncode 方法以使其安全。

      如果您希望我发布我使用的那个,请告诉我。

      添加了我使用的编码

          public static class StringHelpers
      {
          public static string HtmlEncode(this string value)
          {
              if (!string.IsNullOrEmpty(value))
              {
                  value = value.Replace("<", "&lt;");
                  value = value.Replace(">", "&gt;");
                  value = value.Replace("'", "&apos;");
                  value = value.Replace(@"""", "&quot;");
              }
              return value;
          }
      
          public static string HtmlDecode(this string value)
          {
              if (!string.IsNullOrEmpty(value))
              {
                  value = value.Replace("&lt;", "<");
                  value = value.Replace("&gt;", ">");
                  value = value.Replace("&apos;", "'");
                  value = value.Replace("&quot;", @"""");
              }
      
              return value;
          }
      }
      

      【讨论】:

      • 如果你能发帖那就太好了
      • 谢谢.. 效果很好。无论如何要从现有的 html 页面预填充文本区域
      • 不太明白你的意思[我]。你是说这里的屏幕抓取还是...
      • 如果使用 VS2010 和 ASP.NET MVC2,有两点值得注意。首先,您需要将 放在 web.config 文件中的 中,以使 [ValidateInput(false)] 属性起作用。其次,上述编码器过于天真,不可靠。
      • HttpUtility 用于HtmlEncode/decode 而不是自己编写有什么问题?
      【解决方案4】:

      令人讨厌的是,在 tinymce 版本 4 中,他们似乎删除了 encoding: xml 选项。

      我最终使用了来自 this answer 的 javascript HTML 编码函数,在我的提交按钮上,我在提交表单之前使用 tinymce 的 getContent 和 setContent 方法对 textarea 的内容进行了编码

      【讨论】:

      • 我认为仅依赖客户端编码是有风险的,因为它不会阻止作恶者直接发布到您的站点。您还必须清理服务器上的输入。
      • 是的,永远记住这一点很重要
      【解决方案5】:

      我遇到了同样的问题。我不想禁用 ASP.NET MVC 验证功能,所以我一直在寻找,直到找到这个解决方案:

      在 tinyMCE 插件代码中对您的内容进行编码(我使用的是旧版本)

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

      在此之后,我没有再收到应用程序验证错误。然后我在编辑表单时遇到了另一个问题,代码会带有 html 标签

      <strong>My input value</strong>
      

      而不是这个

      我的输入值

      因此,当我在 Controller 中获取值时,我必须解码该字段的 html,如下所示:

      ...    
      entity.field = HttpUtility.HtmlDecode(entity.field);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 2014-02-11
        • 2018-03-19
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        相关资源
        最近更新 更多