如何允许用户输入html注释

时间:2011-11-12 21:21:18

标签: vb.net asp.net-mvc-3 model-view-controller html-encode

使用MVC,EF 4.2。我正在开发一个有评论部分的应用程序。现在,如果用户输入包含HTML的评论,例如

<b>text</b>

并点击提交我收到消息 “检测到一个非常危险的Request.Form值......”

  1. 如何在进入数据库的过程中处理html?我应该删除HTML吗?或者编码吗?我尝试了server.htmlencode文本,但我仍然有相同的错误消息。
  2. 我已经阅读了很多关于这个问题的帖子,包括SO的一些帖子 - this onethis one

    理想情况下,我希望能够允许有限数量的html标签,例如em strong,a。 Anti-XSS,HTML Agility,某种BB代码或降价式编辑器仍然是推荐的方式吗?我知道杰夫有一个白名单代码 - 但是它已经很少了。

4 个答案:

答案 0 :(得分:1)

你可以做到

[ValidateInput(false)]
public ActionResult foo()
{
}

或者您可以使用AllowHtml

修饰模型属性
   public class Foo
    {
        [AllowHtml]
        public string bar{ get; set; }
    }

答案 1 :(得分:0)

您可能还需要在web.config中设置requestValidationMode:

</system.web>
  <httpRuntime requestValidationMode="2.0" />
</system.web>

有关详细信息,请参阅this link

答案 2 :(得分:0)

MVC有一个属性,允许您指定属性应该允许html而不完全禁用验证。它仍然很危险,但它可以限于单一财产,因此可以减轻风险。这是MSDN article for the AllowHtmlAttribute。正确使用属性应该是装饰模型中的相应属性:

public class MyModel
{
    public MyModel()
    {

    }

    // Some other stuff in here

    [AllowHtml]
    [HttpPost]
    public string MyHtmlString { get; set; }

}

答案 3 :(得分:0)

我允许html incomments的解决方案如下:

  1. 我的评论类
  2. 中的CommentText属性上的AllowHtml
  3. 允许较小的标记子集。使用Html Sanitizer类来清除通过白名单
  4. 不允许的Html和内联脚本
  5. 然后将结果保存到数据库,就像我通常那样
  6. 在输出时,使用Html.Raw在评论中显示Html