2

在我的 ASP.NET MVC 5 应用程序中,我从表单中读取一些数据,然后对后端的操作方法进行 jQuery ajax 调用,以将其保存到我的数据库中。

在表单中,如果我输入一些带有 HTML 标签的文本,我会因为 HTML 标签而收到错误消息。我得到了标准的“......潜在危险......”错误。

我正在使用 GetSafeHtmlFragment() 清理后端的数据,但是一旦数据到达我的操作方法,就会生成错误。

从客户端脚本(例如 jquery ajax 调用)向我的操作方法发送数据的正确方法是什么?我是否首先在我的 JS 事件处理程序中对数据进行 HTML 编码,然后将其发送到我的操作方法?

4

1 回答 1

1

无论是客户端脚本 (XHR) 还是直接 HTTP 请求,ASP.Net 运行时都会使用Request Validation阻止请求。

好吧,在 MVC 中,这发生在您到达 Action 方法中的 GetSafeHtmlFragment() 之前。您需要做的是为期望带有标记的数据的操作方法关闭请求验证。

您可以对如何关闭 Request Validation进行细粒度控制。

  1. 如果您有一个模型类,其中您的标记数据是一个属性 - 使用该[AllowHtml]属性来装饰该模型的属性,因此不会对该属性应用请求验证

  2. 如果要关闭 Action 方法或整个 Controller 的请求验证,请使用[ValidateInput(false)]Action 方法或 Controller 本身。

如果没有堆栈跟踪或更详细的信息,这是我能想到的最佳答案。只要您了解您允许标记(包括潜在危险的标记)作为您的数据,关闭请求验证也不错。

由于您已经拥有 GetSafeHtmlFragment(),请关闭特定属性或 Action 方法的请求验证。对于微软的 Antixss 库作为消毒剂,您应该注意以下几点:

于 2014-06-19T13:09:08.493 回答