如何防止跨站点请求通过Ajax post伪造?

我在Mvc项目中有一个带AntiforgeryToken()值的表单。 在提交表单时,它将与其相应的控制器在MvC项目中进行后续操作ValidateAntiforgeryToken

它转到确认页面。 在具有隐藏表单的两个按钮的确认中,这将在前面的上述相同的Post操作中进行。我在这两个隐藏表单中添加了Html.Antiforgerytoken() 。 点击按钮时,我们不需要Form Post [页面重新加载],而不需要使用Ajax post。

我尝试过使用Ajax文章(使用Antiforgerytoken ),但它不会Antiforgerytoken Post操作。 显示404错误。

你能建议如何使用Ajax post来启用AntiforgryToken吗? 为此,什么类型的代码句柄和它添加在哪里?

表格详情:

 <form  method="post" action="">
     @Html.AntiForgeryToken()
     <input type="hidden" name="Name" value="@downloadInfo.Name" />
     <input type="hidden" name="Company" value="@downloadInfo.Company" />
     <input type="hidden" name="Email" value="@downloadInfo.Email" />
     <input type="hidden" name="Phone" value="@downloadInfo.Phone" />
 </form>  

阿贾克斯邮报:

$.ajax({     
    url: url,
    type: 'POST',
    data: JSON.stringify(Formdatas),
    contentType: 'application/json; charset=utf-8',
    beforeSend: showLoadingGraphic(id),
    success: onSuccessfulPost
});

如果您收到的404不是来自令牌,那么您的网址或方法无效。 您将标记包含在ajax表单文章中,因此请使用工具Fiddler查看正在请求的URL并首先进行修复。

我猜你使用'URL'的Ajax调用不正确


尝试生成您的表单(使用Html.BeginForm帮助器):

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
    @Html.AntiForgeryToken()
    <input type="hidden" name="Name" value="@downloadInfo.Name" />
    <input type="hidden" name="Company" value="@downloadInfo.Company" />
    <input type="hidden" name="Email" value="@downloadInfo.Email" />
    <input type="hidden" name="Phone" value="@downloadInfo.Phone" />
}

接着:

var myForm = $('#myForm');
$.ajax({     
    url: myForm.attr('action'),
    type: myForm.attr('method'),
    data: myForm.serialize(),
    beforeSend: showLoadingGraphic(id),
    success: onSuccessfulPost
});

现在防伪标记和隐藏字段将被正确发送到服务器。

链接地址: http://www.djcxy.com/p/62769.html

上一篇: How can Prevent Cross site request forgery via Ajax post?

下一篇: How does MVC populate the model when data is posted back