2014-03-28 9 views
0

내 응용 프로그램의 X-Frame-Options 헤더에 대한 영역 별 동작을 만들려고합니다. - 내 주요 사이트에 대한 한 (소위 "앱 XFrameOptionsHeader - MVC 5 영역 별 설정

  • 두"영역 "가"루트 "의 MVC 구조의

    • 여러 WebApiControllers :

      나는 다음과 같은 구조의 단일 MVC (5) 프로젝트가 ") 북마크 렛 (북마크릿)에 대한 설명

    "응용 프로그램 "은 내 응용 프로그램의 주요 영역입니다. "북마크릿"을 사용하면 사용자가 북마크릿을 클릭 할 때마다 (어떤 사이트에 있든 상관없이) iFrame에 페이지가 표시됩니다.

    X 프레임 옵션 헤더로 보호 할 API와 "앱"영역을 원하지만 북마크릿은 모든 웹 사이트의 iframe 내부에 표시되기 때문에이 헤더가 없어야합니다 (사용자가 책갈피를 클릭하면 iframe이 열리고 현재 페이지의 제목과 URL을 저장하는 양식이 미리 채워집니다. 즐겨 찾기 링크를 응용 프로그램에 저장하는 "즐겨 찾기에 추가"기능으로 생각하십시오.

    것은 내가 현재 내 Global.asax에 내부에 다음과 같은 사용하고 있습니다 :

     
    
        protected void Application_Start() 
        { 
         ... 
    
         AntiForgeryConfig.SuppressXFrameOptionsHeader = true;      
        } 
    
    

    불행하게도,이 모든 영역에 걸쳐 X-프레임 - 옵션 헤더를 억제한다. 이 동작을 응용 프로그램의 루트 영역이나 다른 영역이 아닌 책갈피 릿 영역에만 적용 할 수 있습니까?

    X- 프레임 옵션을 여는 것과 관련된 클릭 보안 위험을 알고 있습니다. 사이트의 "응용"영역 (나는 X-Frame-Options로 보호하고 싶습니다) 내에 로그인 기능을 배치함으로써이 위험을 완화하려고합니다. 사용자가 방문하는 모든 사이트에서 열 수있는 X-Frame-Options로 보호 할 수없는 "북마크릿"기능은 제한된 데이터 입력 만 포함합니다. 당신은 사용자 정의를 작성할 수

  • 답변

    2

    이 시나리오를 처리하는 속성 :

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
    public sealed class SuppressHeadersAttribute : ActionFilterAttribute 
    { 
        public override void OnResultExecuting(ResultExecutingContext filterContext) 
        { 
         //suppress headers here 
         //filterContext has access to the HttpContext 
        } 
    } 
    

    그런 다음이 후두둑이 속성이 기본 컨트롤러에서 상속 따라야 할 컨트롤러를 가지고있다.

    [SuppressHeader] 
    public class BaseController : Controller 
    { 
    } 
    
    public class YourController : BaseController 
    { 
        //Do Stuff 
    } 
    

    이 기능을 사용하면 필요한 항목에만 헤더를 표시하지 않을 수 있습니다.

    +0

    이것은 대부분의 방법으로 나를 거기에 줬다. AntiForgeryConfig.SuppressXFrameOptionsHeader의 특성으로 인해 EnableHeaders 및 SuppressHeaders라는 두 가지 특성을 만들어야했습니다. 나는 북마크릿 용 컨트롤러에 "SuppressHeaders"를 적용하고 다른 모든 컨트롤러에는 "EnableHeaders"를 적용했습니다. 스케일링이 남아있을 때 문제가 발생할지 여부 - 로버트의 제안과 직접적으로 연결되는보다 효과적인 해결책은 다른 특정 요청 수단을 통해 X-Frame-Options 헤더를 제거하는 것입니다 (overarching AntiForgeryConfig 값을 변경하지 않고). 고맙습니다! – Mike