
服务器
ASP.NET MVC - ValidateAntiForgeryToken 过期
在ASP.NET MVC中,常常使用ValidateAntiForgeryToken来防止跨站请求伪造(CSRF)攻击。ValidateAntiForgeryToken是一个特性,用于验证来自表单的防伪标记是否与服务器上的预期值匹配。然而,有时候我们可能会遇到一种情况,就是ValidateAntiForgeryToken过期的问题。问题描述在一些复杂的应用程序中,可能会出现页面在用户浏览器中停留的时间过长,导致ValidateAntiForgeryToken过期的情况。当用户提交表单时,服务器会验证表单中的AntiForgeryToken与服务器上的预期值是否匹配。如果匹配成功,则继续处理请求,否则会抛出异常。问题解决为了解决ValidateAntiForgeryToken过期的问题,我们可以采取以下措施:1. 增加AntiForgeryToken的有效期限默认情况下,AntiForgeryToken的有效期限是在每个请求结束后重新生成的。我们可以通过修改Global.asax文件中的方法来增加有效期限,如下所示:csharpprotected void Application_EndRequest(){ // 增加AntiForgeryToken的有效期限为2小时 AntiForgeryConfig.UniqueClAImTypeIdentifier = ClAImTypes.NameIdentifier; Response.Cookies.Add(new HttpCookie("__RequestVerificationToken") { HttpOnly = true, Secure = Request.IsSecureConnection, Expires = DateTime.Now.AddHours(2) });}这样做的好处是,即使用户在页面上停留了很长时间,AntiForgeryToken仍然有效,可以避免过期的问题。2. 使用Ajax请求另一种解决方案是使用Ajax请求来提交表单数据,而不是传统的POST请求。通过使用Ajax请求,我们可以在用户停留在页面的同时,定期更新AntiForgeryToken的值,从而避免过期的问题。下面是一个使用Ajax请求的案例代码:csharp$(document).ready(function() { // 每隔30分钟更新AntiForgeryToken的值 setInterval(function() { $.Ajax({ url: "/Account/RefreshAntiForgeryToken", type: "GET", success: function(result) { // 更新表单中的AntiForgeryToken值 $("#__RequestVerificationToken").val(result); } }); }, 1800000); // 30分钟});在上述代码中,我们通过定时调用RefreshAntiForgeryToken方法来更新AntiForgeryToken的值,并将其设置到表单中的隐藏字段中。为了防止跨站请求伪造攻击,在ASP.NET MVC中使用ValidateAntiForgeryToken是很重要的。然而,由于AntiForgeryToken的有效期限,我们可能会遇到过期的问题。通过增加AntiForgeryToken的有效期限或使用Ajax请求来更新AntiForgeryToken的值,我们可以解决这个问题,并提高应用程序的安全性。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号