2012-10-31 2 views
2

공유 서버에서 실행중인 ASP.NET MVC3 응용 프로그램이 있습니다. 서버에 SSL 인증서를 설치했으며 응용 프로그램의 모든 컨트롤러에 RequireHTTPS가 표시됩니다. 의도하지 않은 페이지는 암호화되지 않은 상태로 제공됩니다 (즉, 모든 페이지가 HTTPS를 통해 제공됨).MVC 응용 프로그램의 모든 페이지에 HTTPS 적용

그러나 CERTAIN 페이지 (예 : js, HTML 오류 페이지)는 요청시 호스트 이름에 80을 추가하여 암호화되지 않은 상태로 액세스 할 수 있습니다. 내가 말하는 페이지는 정적이지만, 내 사이트의 모든 페이지를 보호하여 암호화되지 않은 파일을 다운로드하지 못하게하는 방법은 무엇입니까? 이 사이트는 공유 사이트이므로 IIS 서버 설정에 액세스 할 수는 없지만 HTTP 처리기 또는 URL 다시 모듈을 사용하는 방법이 있습니까? 아니면 파일 폴더에 직접 사용 권한을 설정할 수 있습니까?

감사합니다.

+0

페이지의 의미는 무엇입니까? html 파일? – VJAI

+0

http://serverfault.com/questions/165835/how-to-restrict-access-to-web-pages-for-https – VJAI

+0

답장을 보내 주시면 감사하겠습니다. "페이지"란 모든 HTML 페이지, JS 스크립트, 이미지 파일을 의미했습니다. 나는 그 이후로 대부분의 문제를 추론 해왔다. (나는 생각한다.) 직접적으로 "https : // ..."링크로 대체 된 @ Url.Content를 사용하는 것을 포함한다. 그러나 DevExpress 구성 요소를 사용하고 있으며 리소스를 요청할 때 암호화 (예 : CSS 파일, 이미지)를 사용하지 않는 "DXR.axd"를 통해 액세스하는 처리기가 있으며 변경할 수 있는지 확실하지 않습니다. 무언가가 여전히 안전하지 않은 상태로 접근하고 있으며, 나는 그것을 퇴역 시키거나 죽을 필요가 있습니다. :) –

답변

0

나는 내가 SSL이 컨트롤러를 상속되고 싶어 다음이 속성

[RequireSSL] 
public class SecureController : Controller 
{ 

} 

어떤 컨트롤러와 SecureController라는 기본 컨트롤러를 만든 다음이

public class RequireSSL : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpRequestBase req = filterContext.HttpContext.Request; 
     HttpResponseBase res = filterContext.HttpContext.Response; 

     //Check if we're secure or not and if we're on the local machine 
     if (!req.IsSecureConnection && !req.IsLocal) 
     { 

      var builder = new UriBuilder(req.Url) 

           { 
            Scheme = Uri.UriSchemeHttps, 
            Port = 443 
           }; 
      res.Redirect(builder.Uri.ToString()); 
     } 
     base.OnActionExecuting(filterContext); 

    } 


} 

같은 액션 필터 속성을 사용 . 호프가 도와 주면 컨트롤러 동작에 의해 반환되는 뷰가 '페이지'만이되도록해야합니다. 필요한 경우 매우 쉽게 변경해야합니다.

+0

고마워, 나는 전문가가 아니고 배우고 싶다. 이 ActionFilter는 [RequireHttps]는 무엇을합니까? 어쨌든 문제는 콘텐츠 파일을 요청하는 방식 일 수 있습니다. @ Url.Content를 사용하여 직접 "https : // ..."링크로 할 수있는 모든 장소를 바꿨습니다. 그런 다음 SSL을 통한 익명 액세스 만 허용하려했으나 여전히 인증을 요청 받았습니다. 그래서 불안정하게 액세스되는 여전히 SometHING이 있습니다. DevExpress 구성 요소와 관련이있을 수 있으며, 암호화를 사용하지 않고 AFAIK를 변경할 수없는 "DXR.axd"를 통해 액세스되는 처리기가 있습니다. 나는 계속 노력할 것이다. 다시 한번 감사드립니다. –

+0

저는 실제로 RequireHttps Action Filter를 알지 못했습니다.이 필터를 만든 후에 릴리스되었을 수 있습니다. 나는 이것을 MPEG2에서 만들었습니다. 그래서 참으로 내가 만든 것과 똑같은 일을합니다. 그것에 대한 정보 주셔서 감사합니다. – twaldron

+1

사실 내가 실제로 기부를 한 것입니까? :) 나를 믿기 어려워 ... 어쨌든 HTTP, HTTPS, 포트 80과 443 등등에 대해 진지하게 공부할 필요가 있습니다. @ Url.Content가 문제가 있거나 다른 것이 있다면. 내 말은 : 호스트 이름에 80을 추가하고 요청을 재발행하는 것입니까? 다시 한번 감사드립니다. –

관련 문제