如何防止跨站点请求通过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