0

我有一个 ASP.NET MVC 4 项目,其中我在视图中使用 HTML 输入元素。该元素的值通过 JQuery post 调用发送到服务器。我没有使用任何 Razor 语法,也没有手动向 Controller 操作添加任何特殊代码。

当我将 post 参数之一设置为 HTML 代码时,调用将失败,返回 500 Internal Server Error。我的问题是,为了帮助防止 XSS 攻击,JQuery 是即时终止调用还是 ASP.NET MVC?其次,我将如何关闭此功能?

4

1 回答 1

3

JQuery 是即时终止调用还是 ASP.NET MVC?

他们都没有。它是 ASP.NET 引擎。这个特性早在 ASP.NET MVC 出现之前就已经存在于 ASP.NET 中,并且由于 ASP.NET MVC 是在 ASP.NET 之上构建的,因此它继承了它。

其次,我将如何关闭此功能?

通过装饰视图模型属性,您将使用属性绑定到该值[AllowHtml]

public class MyViewModel
{
    [AllowHtml]
    public string Html { get; set; }
}

现在您可以进行以下控制器操作:

[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
    ...
}

您正在使用 jQuery.ajax 调用并发送任意 HTML 内容:

$.ajax({
    url: '@Url.Action("SomeAction")',
    type: 'POST',
    data: { html: '<div>Hello World</div>' },
    success: function(result) {

    }
});

显然,通过这样做,您完全承认用户可以向您的站点发送任意 HTML,包括脚本和所有危险内容。因此,为了防止 XSS 攻击,请确保您已正确编码此值,然后再将其显示回某个页面。

于 2012-10-02T06:11:37.767 回答