2011-11-12 66 views
2

使用MVC,EF 4.2。我正在研究一个有评论部分的应用程序。现在,如果用户输入包含HTML的评论,例如如何让用户输入html注释

<b>text</b> 

和点击提交我得到的消息 “检测到ptentially危险的Request.Form值...”

  1. 如何处理HTML的方式进入数据库?我应该剥离HTML吗?或者编码它?我尝试了server.htmlencode文本,但我仍然有相同的错误消息。

我看过关于此事的一些职位,其中包括一些在这里SO - this onethis one

理想的情况下,我希望能够让html标签数量有限,如EM强, 一个。反XSS,HTML敏捷性,某种BB代码或降价样式编辑器是否仍然是推荐的方式?我知道杰夫有一个白名单的代码 - 但它已经有几年了。

回答

1

你可以做

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

,或者你可以用AllowHtml

public class Foo 
    { 
     [AllowHtml] 
     public string bar{ get; set; } 
    } 
+0

我看了那些属性,但他们不会允许通过评论提交XSS和恶意代码的可能性? –

+0

这是折衷的,如果你使用旧的视图引擎(我忘了名字),你可以编写'<%:Html.TextBoxFor%>'它会编码这个值,或者如果你使用的是razor'@'语法它将编码html – Rafay

+0

如果您担心xss和其他代码查看[Microsoft的Anti-XSS](http://wpl.codeplex.com/)库 – Buildstarted

0

装饰模型属性您可能还需要设置你的web.config中requestValidationMode:

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

有关更多详细信息,请参见this link

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; } 

} 
0

我的允许HTML incomments解决办法如下:

  1. AllowHtml上CommentText特性在我的评论类
  2. 允许一个狭窄的标签子集。使用Html Sanitizer类擦除Html和不允许通过白名单的内联脚本
  3. 然后将结果保存到db,因为我通常会
  4. 在输出时,使用Html.Raw在注释中显示Html