【发布时间】: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