在发送到Controller / DB之前编码HTML

时间:2011-07-25 22:53:57

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

A potentially dangerous Request.Form value was detected from the client (Body="<b></b>").

当我尝试在我的评论字段中输入<b></b>之类的内容并发送它时,会发生此错误。我搜索过,我发现只有完全禁用危险数据的验证,但我不想禁用它,因为那时我的网站容易受到攻击。
我想要的是在发送之前对其进行编码沿着这些线,所以它将发送数据,只是编码。

3 个答案:

答案 0 :(得分:11)

如果您使用的是.net 4,您可以使用[AllowHtml]来装饰您的模型,这将只允许该特定属性。然后,您可以在控制器逻辑中对其进行清理。

public class MyViewModel
{
    public string prop1 { get; set; }

    [AllowHtml]
    public string prop2 { get; set; }
}

答案 1 :(得分:7)

为什么不简单地使用HttpUtility.HtmlEncode方法?

string encodedHTML = HttpUtility.HtmlEncode(unencodedString)

您也可以查看Microsoft的Anti-XSS Library

答案 2 :(得分:0)

如何在提交按钮上添加javascript事件,该事件在发送表单之前对文本值进行编码?

尝试encodeURI或encodeUriComponent