在 ASP.NET MVC 中,可以使用防伪标记(Anti-Forgery Token)来防止跨站点伪造请求攻击(Cross-Site Request Forgery,CSRF)。
在默认情况下,ASP.NET MVC 只会为 HTTP POST 请求生成防伪标记。但是,有些情况下,我们可能需要为所有类型的请求生成防伪标记,以增强安全性。以下是一个示例代码,可供参考:
public class ValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { var request = filterContext.HttpContext.Request; var cookie = request.Cookies[AntiForgeryConfig.CookieName]; AntiForgery.Validate(cookie != null ? cookie.Value : null, request.Headers["__RequestVerificationToken"]); } }
filters.Add(new ValidateAntiForgeryTokenAttribute());
这样,无论请求类型是 GET 还是 POST,都会自动为其添加防伪标记。
注意:一旦应用程序启用了全局防伪标记,就必须确保所有的 AJAX 请求都携带了防伪标记。如果不携带,将会被防止访问,所以需要在 AJAX 请求中添加以下代码:
$(document).ajaxSend(function (event, xhr, options) { var token = $('input[name="__RequestVerificationToken"]').val(); if (token) { xhr.setRequestHeader("__RequestVerificationToken", token); } });
以上就是 ASP.NET MVC 中为所有类型请求添加防伪标记的解决方法。