无法将HTML代码发布到XSS攻击服务器端

时间:2012-10-02 06:10:31

标签: jquery asp.net-mvc xss

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

当我将其中一个帖子参数设置为HTML代码时,调用将失败,返回500内部服务器错误。我的问题是,为了帮助防止XSS攻击,JQuery是否可以动态终止调用,还是ASP.NET MVC?其次,我将如何关闭此功能?

1 个答案:

答案 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攻击,请确保在将其显示回某个页面之前对此值进行了正确编码。