我的应用程序使用 jQuery Ajax 帖子来保存和更新记录。
我所有的帖子都像这样使用 JSON.stringify:
jQuery.ajax({
url: '@Url.Content("~/Vendor/SaveProvider")/',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(
{
jsonProvider: ko.toJSON(appViewModel.provider),
jsonAddresses: ko.toJSON(appViewModel.addresses),
jsonContacts: ko.toJSON(appViewModel.contacts)
}),
我正在阅读 ASP.NET MVC 带有用于控制器调用的ValidateAntiForgeryToken过滤器,但我找不到任何关于如何使用 Jquery Ajax 和 JSON.stringify 使其工作的资源......
所以,我产生了这个想法,想知道它是否可以......
我知道 jQuery.Ajax 允许您发送额外的标头信息,所以我会这样做:
- 将创建一个自定义过滤器控制器
- 此过滤器将检查我的当前会话是否不为 NULL,并将检索用户首次登录 Web 应用程序时创建的“sessionlogid”(GUID)。
- 将获取与包含该“sessionlogid”的 Jquery Ajax 帖子一起发送的自定义标头值,并将查看其是否相同。
- 如果它的值相同,则让控制器离开,否则将发送错误。
我的过滤器应该是这样的:
public class ValidateAjaxSessionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.Headers["sessionlogid"] == null ||
filterContext.HttpContext.Request.Headers["sessionlogid"] != Session["sessionlogid"])
{
throw new ArgumentNullException("Invalid Request", new Exception());
}
}
}
这有意义还是有更好的方法来保护应用程序?
感谢你的帮助!!