【问题标题】:AllowHtml does not work with model first - "potentially dangerous request"AllowHtml 首先不适用于模型 - “潜在危险请求”
【发布时间】:2016-05-02 23:00:11
【问题描述】:

我首先使用带有模型的 MVC。我在接受富文本输入的控制器上使用了[ValidateInput(false)]。这工作得很好。现在我发现以下帖子允许我使用我更喜欢的[AllowHtml] (post)。

[MetadataType(typeof(YourEntityMetadata))]
public partial class YourEntityClass
{            
}   

public class YourEntityMetadata
{
    [AllowHtml]
    public string YourPropertyWithHtml { get; set; }
}

我试过了,但是没有用。出于测试原因,我将AllowHtml 直接添加到自动生成模型中的属性上,这也不起作用。在这两种情况下,我都收到相同的错误“潜在危险请求...”

有问题的输入是来自 CKEditor 的简单富文本<p> lorem <\p>。 控制器调用一个单独的函数,该函数执行实际写入以访问数据库,并首先访问模型容器。

自动生成中有什么东西可能会阻止[AllowHtml] 工作。控制器不直接访问或创建实体,而是将字符串传递给另一个创建实体并将其保存到数据库的函数,这是一个问题吗?

编辑

我禁用了检查 XSRF 令牌的过滤器。我设置了请求验证模式:

<httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" />

我将控制器方法剥离为:

public int SaveBlock(string blockCont)
{
    var testt = new ViewTest() { BlockContent = blockCont };
    return 0;
}

使用简单的视图模型:

    public class ViewTest
{
    [AllowHtml]
    public string BlockContent { get; set; }
}

该请求仍被标记为“潜在危险”错误。

【问题讨论】:

  • [AllowHtml] 将正常工作,前提是它应用于正确的属性。
  • 你不应该在自动生成的类代码上放任何东西。事实上,你真的不需要实体类上的这个属性。您应该创建一个视图模型以将数据从视图传输到操作方法,并将此属性应用于相关属性。
  • 嗨,Arman,现在完全研究这个为时已晚,但第一个链接可能真的很有帮助。我确实在Filter 中访问Request 以检查XSRF 令牌。这可能会在[AllowHtml] 之前触发验证。我明天会检查这个。
  • public int SaveBlock(string blockCont) 方法是什么?您需要显示您的发帖方法应该是public ActionResult SaveBlock(YourEntityMetadata model)

标签: c# asp.net-mvc xss ef-model-first


【解决方案1】:

考虑到有用的 cmets,我对该问题进行了更多阅读。我的困惑是,我认为数据注释是在数据写入模型时应用的,而不是在控制器方法中被接受时应用的。

当然,我将字符串发送到控制器并希望在我实际将其写入模型时对其进行验证的方法是错误的。也许是我想要的太多了。

对于我的方法,我想尽可能地将我的数据模型与控制器分离(使用存储库),我想唯一的前进方式是发送到控制器的输入的视图模型。但是,在我的情况下,我想我会坚持对少数非 html 字符串输入进行编码,只让一个 html 输入通过数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多