我在表单中有一个“描述”字段。我希望用户不被限制在此字段中使用特殊字符。
因此,我希望能够将以下数据从我的客户端发布到我的服务器,保存到数据库,并能够再次正确呈现:
测试说明 ( & &%$^&^() ^&&$& 87566467679089765 ?<>?<>?<>?<>":";';';'][][][][{}{} {}
我对该主题进行了一些阅读,但似乎我的选择比我预期的要多。为了安全起见,我想确保我正确地执行此操作。
在我的模型中,我使用 AllowHtml 属性标记了我的 Description 属性:
[DisplayFormat(ConvertEmptyStringToNull = false), AllowHtml]
public string Description { get; set; }
这允许将上述数据发布到我的控制器,但不能解决问题的核心。我现在相信我需要清理我的输入。我相信这意味着我需要利用 HttpUtility 库。
查看 HttpUtility,我看到了很多方法:
- HtmlAttributeEncode
- html编码
- 网址编码
根据这篇文章,HtmlEncode 和 UrlEncode 之间似乎没有太大区别。
我想知道几件事:
- 在这里使用 HttpUtility 是正确的选择吗?
- 在 POST 之前不对我的输入进行任何处理可以吗?(我可以在服务器端进行所有编码吗?)
- 我应该使用 Microsoft 反 xss 库而不是 HttpUtility 吗?
以及通常我可能不会被告知的任何其他陷阱。
更新:
这是我的模型:
<div class="detailsRow optional">
<%= Html.LabelFor(model => model.Description, new { @class = "descriptionLabel" }, Model.DescriptionLabel)%>
<%= Html.TextAreaFor(model=> model.Description) %>
</div>
和我的控制器方法:
public ActionResult SaveNewOrderDetails(NewOrderDetailsModel orderDetailsModel)
{
string description = orderDetailsModel.Description;
//Successfully got description
//Example code:
Order order = new Order(description);
order.Save();
return Json(new { id = order.ID, name = order.Name });
}
在我的代码通过“return Json”语句后,我遇到了另一个错误:
从客户端检测到潜在危险的 Request.Form 值 (Description="...>?<>?<>?<><?>":";';';'][][][][. ..”)。
我的理解是这不应该发生。我应该检查哪些地方?
UPDATE2:无法让 AllowHtml 工作。当我们升级到 MVC4 时,我将重新讨论这个问题。