我有一个 ASP.NET MVC 4 项目,其中我在视图中使用 HTML 输入元素。该元素的值通过 JQuery post 调用发送到服务器。我没有使用任何 Razor 语法,也没有手动向 Controller 操作添加任何特殊代码。
当我将 post 参数之一设置为 HTML 代码时,调用将失败,返回 500 Internal Server Error。我的问题是,为了帮助防止 XSS 攻击,JQuery 是即时终止调用还是 ASP.NET MVC?其次,我将如何关闭此功能?
我有一个 ASP.NET MVC 4 项目,其中我在视图中使用 HTML 输入元素。该元素的值通过 JQuery post 调用发送到服务器。我没有使用任何 Razor 语法,也没有手动向 Controller 操作添加任何特殊代码。
当我将 post 参数之一设置为 HTML 代码时,调用将失败,返回 500 Internal Server Error。我的问题是,为了帮助防止 XSS 攻击,JQuery 是即时终止调用还是 ASP.NET MVC?其次,我将如何关闭此功能?
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 攻击,请确保您已正确编码此值,然后再将其显示回某个页面。