2013-08-27 4 views
0

설정 - 즉 :역 직렬화 viewstate가 문자열이 내가 asp.net 웹 응용 프로그램과 사이트 간 위조 공격을 방지하기위한 자동 생성 된 코드를 사용하고

protected const string AntiXsrfTokenKey = "__AntiXsrfToken"; 
private string _antiXsrfTokenValue; 
protected void Page_Init(object sender, EventArgs e) 
{ 
    var requestCookie = Request.Cookies[AntiXsrfTokenKey]; 
    Guid requestCookieGuidValue; 
    if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue)) 
    { 
     _antiXsrfTokenValue = requestCookie.Value; 
     Page.ViewStateUserKey = _antiXsrfTokenValue; 

아약스/WEBMETHOD 요청을 사용하여, _VIEWSTATE 숨겨진 입력의 값을 게시하여 데이터베이스를 변경하기 전에 요청의 유효성을 검증하고 싶습니다. 그러나

, 나는 los.Deserialize 방법이 실패

internal static void Validate(string encodedViewstate) 
{ 
    var request = HttpContext.Current.Request; 
    var requestCookie = request.Cookies[AntiXsrfTokenKey]; 
    var antiXsrfTokenValue = requestCookie.Value; 
    var los = new System.Web.UI.LosFormatter(true, antiXsrfTokenValue); 
    var xsrfData = los.Deserialize(encodedViewstate); 

시도 : 혼자 UserKey 즉

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm 

인코딩 된 viewstate가 문자열에 대한 올바른 키가 아닙니다.

는 사람이 (즉, MAC 및 UserKey의 조합)을 ViewStateUserKey 속성을 설정 한 후 인코딩 된 viewstate가를 역 직렬화하는 방법에 도움을 주시기 바랍니다 수 있습니다. 귀하의 생각/전문 지식에 감사드립니다.

답변

1

당신은 페이지 자체가 사용하는 것과 동일한 PageStatePersister 인스턴스를 사용해야합니다. 그렇지 않으면이 검사가 안정적으로 작동하지 않습니다. 예를 들어, 페이지의 코드 숨김이 인스턴스적인 방법을 고려하십시오

만큼 Page.ViewStateUserKey가 이미 설정되어
private void CheckCsrfToken() { 
    var persister = this.PageStatePersister; 
    persister.Load(); 
    if (persister.ViewState == null) { 
     throw new Exception("Validation failed."); 
    } 
} 

, 예를 persister 반환은 수정도 적절하게 설정해야합니다.