【问题标题】:How can I avoid getting the "Potentially dangerous request" error with json <> MVC3 or MVC4?如何避免使用 json <> MVC3 或 MVC4 出现“潜在危险请求”错误?
【发布时间】:2013-04-02 01:19:51
【问题描述】:

我正在使用 Json 将更新信息发送到以下控制器操作:

    [HttpPost]
    public JsonResult JsonUpdate(string pk, string rk, string fld, string val) {
        Content content = null;
        try {
            if (fld == "TempRowKey") {
                content = contentService.Get(pk, rk);
                rk = utilityService.DotFormatToRowKey(val);
                contentService.UpdateRowKey(content, rk, User.Identity.Name);
            } else {

我意识到这是导致问题的 MVC 中的附加保护,但我需要能够在 val 参数中传递 HTML 代码,但我收到以下错误:

A potentially dangerous Request.Form value was detected from the client (val="...e HashMap <K,V>, LinkedHashMap..."). 

请注意,这是管理员输入的有效文本。此屏幕仅供管理员使用,因此我可以不用保护该字段。

看起来 MVC2、3 和 4 之间有一些变化。

我有哪些方法可以避免 MVC3 和 MVC4 出现这个问题。我在stackoverflow上看到了另一个像我一样的帖子,但它并没有真正解决问题。

请注意,我正在寻找可以应用于此操作的本地内容。我在网上看到了一些建议,但似乎在如何使用不同的 MVC 版本来处理这个问题之间存在混淆。是对数据进行编码和解码的最佳方法吗?如果是,我该怎么做?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:
    [ValidateInput(false)]
    public JsonResult JsonUpdate(string pk, string rk, string fld, string val)
    {
        ...
    

    但是,您也应该能够执行以下操作:

    public class MyJsonUpdateModel
    {
        public string pk { get; set; }
        public string rk { get; set; }
        public string fld { get; set; }
    
        [AllowHtml]
        public string val { get; set; }
    }
    
    // [ValidateInput(false)] not needed because model states HTML is allowed
    public JsonResult JsonUpdate(MyJsonUpdateModel model)
    {
    

    【讨论】:

    • 感谢您的建议。我喜欢您的第二个建议,因为我从未见过与 json 一起使用的视图模型。您认为我这样做会更好还是在存储之前对数据进行编码然后解码?
    • @Gemma 由你决定,但我建议不要执行 ValidateInput(false)。与其在请求之前进行编码,在请求之后进行解码,不如只接受潜在的不安全(可能的 HTML)输入,然后在控制器中检查/验证它,然后再对它进行任何操作。
    【解决方案2】:
    public class MyModel{
      [AllowHtml]
      public string  Text{get;set;}
    }
    

    您需要在字段中添加 [AllowHtml] 属性。 还要确保你没有向 Action 添加 FormCollection 模型,你可以看到 https://stackoverflow.com/a/4866070/1431191

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多