2013-07-31 4 views
2

Google 보안 팀은 모든 쿠키가 Secure = true로 설정되어야합니다.AntiForgeryConfig.RequireSsl은 SSL없이 사용할 때 임의의 오류를 발생시킵니다.

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection; 
    } 

을하지만 지금 우리는 SSL을 사용하지 않는 우리의 테스트 서버에 문제가 :

는 MVC AntiForgery을 위해, 우리는 다음과 같은 코드를 사용하고있는 보안 속성을 설정합니다. 때때로 우리는 자발적인 오류를

예외의 위치를 ​​파악하기 위해 ASP.NET MVC 코드에서 찾고

The anti-forgery system has the configuration value AntiForgeryConfig.RequireSsl = true, but the current request is not an SSL request. 
, 우리는 발견 다음

private void CheckSSLConfig(HttpContextBase httpContext) 
{ 
    if (_config.RequireSSL && !httpContext.Request.IsSecureConnection) 
    { 
     throw new InvalidOperationException(WebPageResources.AntiForgeryWorker_RequireSSL); 
    } 
} 

그것은 올바른 것하고 실행하기 때문에 작동합니다 순서는

AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection; 
    // ... something happens in between 
     if (_config.RequireSSL && !httpContext.Request.IsSecureConnection) 
     { 
      throw new InvalidOperationException(WebPageResources.AntiForgeryWorker_RequireSSL); 
     } 

이다 그러나 우리가 그 자체로 우리의 테스트에서 SSL을 사용하지 않지만 일부 요청을 HttpContext.Current.Request.IsSecureConnection 사실 반환 것 같다 rver.

어떻게 될까요? 왜 우리는이 예외를 얻습니까?

+0

마침내 근본 원인을 파악할 수 있었습니까? – Darius

+0

확실하지 않습니다. 우리의 모든 테스터를 SSL로 이동 한 후에 오류가 사라진 것 같습니다. 아마도 잠시 동안 테스트 서버에 http와 https 웹 사이트가 있었기 때문에 브라우저에 엉망진창이되어 HTTP 전용 웹 사이트에 보안 쿠키를 전송했기 때문일 수 있습니다. 어쨌든 다음에 https로 웹 응용 프로그램을 개발할 때 염두에 두어야 할 것입니다. – JustAMartin

+0

우리는 비슷한 점도 있지만 약간 다른 맥락에서 볼 수 있습니다. SSL은 테스트 환경에 설치되어 있지만 테스트 용으로는 사용하지 않습니다. 인증서를 삭제하면 정상적으로 작동합니다. SSL을 구성했지만 https : URL을 사용하지 않으면이 오류가 발생합니다. 기계 수준의 구성과 환경 문제를 제안하는 1 대의 기계에만 국한된 것으로 보입니다. –

답변

1

AntiForgeryConfig.RequireSsl에 대한 정보를 찾고 있었고 귀하의 질문을 찾았습니다. 당신의 다음 코드에서 :

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection; 
} 

당신은 로컬 값 (Request.IsSecureConnection)를 사용하여 응용 프로그램 레벨 값 (AntiForgeryConfig.RequireSsl)을 수정합니다.

다른 Request.IsSecureConnection 값을 가진 두 개의 요청이있는 경우 어떻게됩니까? - 진정한 에 두 번째 요청 세트 AntiForgeryConfig.RequireSsl - - 거짓 에 첫 번째 요청 세트 AntiForgeryConfig.RequireSsl가 첫 번째 요청이 CheckSSLConfig에 의해 평가된다 (참) - 두 번째 요청이

당신은 수정하지 않도록해야한다 (참) CheckSSLConfig에 의해 평가 전역 응용 프로그램을 이런 방식으로 설정하고 그런 종류의 동작을 처리 할 수있는 고유 한 필터를 작성하십시오.