2010-06-08 3 views
2

[ValidateAntiForgeryToken] 지시문의 Salt 매개 변수를 사용하여 ASP.NET MVC 응용 프로그램을 고려하십시오.ValidateAntiForgeryToken 런타임 런타임의 런타임로드

많은 고객이 응용 프로그램을 사용하는 시나리오입니다. 컴파일시에 Salt을 알리는 것은 그리 바람직하지 않습니다.

현재 전략은 web.config에서 Salt 값을 찾는 것입니다.

[ValidateAntiForgeryToken(Salt = Config.AppSalt)] 
//Config.AppSalt is a static property that reads the web.config. 

이것은 Salt 컴파일 시간에 const를해야한다는 제안 컴파일 타임 예외로 이어집니다.

속성 인수는 속성 매개 변수 형식의 발현 또는 배열 생성 식 대해서 typeof, 상수 식이어야

나는되도록 Salt의 런타임 로딩 할 수 있도록 응용 프로그램을 수정하는 방법 앱을 각 고객에 맞게 다시 채울 필요가 없습니다.

Salt함으로써 형태를

+0

:

[ValidateAntiForgeryTokenWrapper(HttpVerbs.Post)] public class ProductController : Controller { // Only HTTP POST requests are validated. } 

이 새로운 속성으로 정의된다. – RickAndMSFT

답변

5

나는 다른 고객을 위해 다른 소금이있을 것을 요구 받았다. 이 경우 런타임시 소금을 주입하기 위해 Dixin의 솔루션을 사용했습니다.

Anti Forgery Request Recipes For ASP.NET MVC and AJAX "런타임에서 비정상적인 염분을 지정하십시오."섹션에 있습니다.

는 새로운 속성으로 컨트롤러 장식은 Microsoft MVC 보안 사람, 당신은이 작업을 수행 할 필요가 없습니다 상태 레위으로

public class ValidateAntiForgeryTokenWrapperAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public ValidateAntiForgeryTokenWrapperAttribute(HttpVerbs verbs) 
    { 
     this._verbs = new AcceptVerbsAttribute(verbs); 
     this._validator = new ValidateAntiForgeryTokenAttribute() 
      { 
       //load from web.config or anywhere else 
       Salt = Configurations.AntiForgeryTokenSalt 
      }; 
    } 

    // Other members. 
} 
+0

아주 좋은 게시물 :) – Thomas

6

솔트 속성은 컴파일 타임 상수로 의미를 무효화의 가능성을 제거, 모든 경우에, 자주 변경하지 않을 것을 고려하십시오. 특정 양식을 특정 작업 방법에 연결하는 방법 일뿐입니다. 예를 들어, 로그인 양식이있는 경우이 양식에 소금 "로그인"을 사용하여 로그인 양식에 유효한 토큰을 암호 변경 양식 등에 사용할 수 없습니다.

모든 경우에 앱의 컴퓨터 키는 자동으로 소금 값으로 사용됩니다. 따라서 두 소금 값이 모두 "로그인"이라고 읽더라도 한 응용 프로그램의 anti-XSRF 토큰을 다른 응용 프로그램에 사용할 수 없습니다. 컴퓨터 키는 Web.config <machineKey> 섹션에서 설정할 수 있습니다.

+0

로그인 양식이있는 경우 위조 방지 장치가 필요하지 않습니다. 사용자는 아직 인증되지 않았으므로 아직 보호 할 항목이 없습니다. – UserControl

+1

로그인 양식을 보호하지 않으면 CSRF 로그인에 열려있을 수 있습니다. 자세한 내용은 http://en.wikipedia.org/wiki/CSRF#Forging_login_requests를 참조하십시오. (편집 : '소금'속성은 MVC 4에서 제거되었으므로 대부분의 응용 프로그램에서 필요하지 않습니다. 사용중인 경우 자세한 정보는 docs를 참조하십시오.) – Levi

+0

감사합니다. 그러나이 기사에 따르면 Flash (crossdomain.xml)의 컨텍스트에서만 가능하며 일반 사이트는 영향을받지 않습니까? – UserControl