我有一个ASP.NET MVC 4项目,我在其中使用View中的HTML输入元素。该元素的值通过JQuery post调用发送到服务器。我没有使用任何Razor语法,并且我没有手动向Controller操作添加任何特殊代码。
当我将其中一个帖子参数设置为HTML代码时,调用将失败,返回500内部服务器错误。我的问题是,为了帮助防止XSS攻击,JQuery是否可以动态终止调用,还是ASP.NET MVC?其次,我将如何关闭此功能?
答案 0 :(得分: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攻击,请确保在将其显示回某个页面之前对此值进行了正确编码。