2017-10-19 2 views
1

사이트 간 요청 위조를 방지하려면 모든 양식에 위조 토큰을 추가해야합니다.면도기가있는 ASP.NET MVC에서 위조 방지 토큰을 자동으로 추가

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
} 

모든 양식에 @Html.AntiForgeryToken을 추가하는 것을 피하고 싶습니다. 이 프로세스를 자동화하는 방법이 있습니까?

독일어 Wikipedia article (Image)은 토큰이있는 숨김 필드가 @Html.BeginForm 뒤에 자동으로 추가되지만 올바르지 않은 것처럼 보입니다.

답변

0

(최적이 아닌) 솔루션 here을 발견했습니다.

그는 다른 위장 방법을 사용하여 위조 토큰을 추가합니다. 이는 기존의 모든 HtmlHelper 확장에 대해 새로운 메소드가 필요하고 코드가 일관성이 없을 수 있다는 단점이 있습니다.

public static class FormExtensions 
{ 
    public static MvcForm BeginDataForm(this HtmlHelper html, string action, string controller) 
    { 
     var form = html.BeginForm(action, controller); 

     html.ViewContext.Writer.Write(html.AntiForgeryToken().ToHtmlString()); 

     return form; 
    } 
} 

서버 측에서는 토큰의 유효성을 검사하는 우아한 솔루션을 발견했습니다. 그는 새로운 AuthorizationFilter를 추가하고 모든 게시 방법에서 토큰의 유효성을 검사합니다.

public class GlobalAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public sub OnAuthorization(filterContext As AuthorizationContext) 
    { 
     if (filterContext.HttpContext.Request.HttpMethod.ToUpper() == "POST") 
     { 
      AntiForgery.Validate(); 
     } 
    } 
} 
관련 문제