2017-05-01 10 views
0

우리 프로젝트에서 ASP.NET 고객은 ASP.NET Webform 4.0 응용 프로그램에서 "펜 테스트"를 실행하여 보안 문제는 우리가 고치기를 원합니다.ASP.NET Webforms - "페이지"에 대해서만 캐싱 사용 안 함, 정적 콘텐츠에 대해서는 없음

지금까지 가장 많은 토론을 유발 한 원인은 앱이 페이지와 콘텐츠를 캐시 할 수 있다는 것을 발견했기 때문입니다. 이로 인해 권한이없는 사용자가 볼 수없는 데이터가 표시 될 수 있습니다 ("펜 테스트" 발견은 대략 말한다). (가) "수정"을 제안

web.config이를 추가하여 캐싱을 방지하기 위해 no-cachecache-controlpragma HTTP 헤더를 설정하는 것입니다 :

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Cache-Control" value="no-cache, no-store, must-revalidate, private"/> 
      <add name="Pragma" value="no-cache"/> 
      <add name="Expires" value="-1"/> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

하지만 전 세계적으로이 작업을 수행하기를 꺼려 조금 해요 - 응용 프로그램의 이미지, 자바 스크립트 및 CSS 파일의 캐싱도 해제되지 않습니까? 사이트 성능에 중대한 부정적인 영향을 미칠 수 있습니다.

"사이에"어떤 작업을 수행 할 수 있습니까? 실제 ASP.NET 페이지가 현재 데이터로 캐싱되지 않도록하고 정적 컨텐트는 계속 캐싱하지 않도록합니다. 그게 가능하다면, 이것을 성취하기 위해 어떤 헤더를 설정해야합니까?

감사합니다.

답변

1

사이트에 대한 마스터 페이지를 사용 중이거나 확장 된 Page 클래스를 사용하여 페이지 클래스와 확장 된 페이지를 만든 경우 적절한 Page_Load 이벤트에 코드를 배치 할 수 있습니다.

Response.Cache.SetCacheability(HttpCacheability.NoCache); //Cache-Control : no-cache, Pragma : no-cache 
Response.Cache.SetExpires(DateTime.Now.AddDays(-1)); //Expires : date time 
Response.Cache.SetNoStore(); //Cache-Control : no-store 
Response.Cache.SetProxyMaxAge(new TimeSpan(0, 0, 0)); //Cache-Control: s-maxage=0 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);//Cache-Control: must-revalidate