Jquery Can';t将HTML代码发布到XSS攻击服务器端

Jquery Can';t将HTML代码发布到XSS攻击服务器端,jquery,asp.net-mvc,xss,Jquery,Asp.net Mvc,Xss,我有一个ASP.NETMVC4项目,其中我在视图中使用了一个HTML输入元素。此元素的值通过JQuery post调用发送到服务器。我没有使用任何Razor语法,也没有手动向控制器操作添加任何特殊代码 当我将一个post参数设置为HTML代码时,调用将失败,返回500个内部服务器错误。我的问题是,为了帮助防止XSS攻击,JQuery是即时终止调用还是ASP.NET MVC?第二,如何关闭此功能 JQuery是即时终止调用还是ASP.NET MVC 没有。它是ASP.NET引擎。这个特性在ASP.

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

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

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

没有。它是ASP.NET引擎。这个特性在ASP.NET MVC出现之前就已经存在于ASP.NET中了,因为ASP.NET MVC是在ASP.NET之上构建的,所以它继承了它

第二,如何关闭此功能

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

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) {

    }
});
$.ajax({
url:'@url.Action(“SomeAction”)',
键入:“POST”,
数据:{html:'Hello World'},
成功:功能(结果){
}
});
显然,通过这样做,您完全承认用户可以向您的站点发送任意HTML,包括脚本和所有危险内容。因此,为了防止XSS攻击,请确保在将该值显示回某个页面之前已对其进行了正确编码

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

没有。它是ASP.NET引擎。这个特性在ASP.NET MVC出现之前就已经存在于ASP.NET中了,因为ASP.NET MVC是在ASP.NET之上构建的,所以它继承了它

第二,如何关闭此功能

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

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) {

    }
});
$.ajax({
url:'@url.Action(“SomeAction”)',
键入:“POST”,
数据:{html:'Hello World'},
成功:功能(结果){
}
});

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

如果我没有使用任何属性,该怎么办?动作方法的参数仅对其是局部的。在将参数名及其值传递给服务器之前,我在客户端定义了正确的参数名及其值。如果您不这样做,您可以使用
[ValidateInput(false)]
属性装饰整个操作。您能告诉我为什么我应该始终使用视图模型而不是特定于操作的方法参数吗?如果我不使用任何属性怎么办?动作方法的参数仅对其是局部的。在将参数名及其值传递给服务器之前,我在客户端定义了正确的参数名及其值。如果您不这样做,您可以使用
[ValidateInput(false)]
属性来装饰整个操作。您能告诉我为什么我应该始终使用视图模型而不是特定于操作的方法参数吗?