2009-12-16 9 views
8

SSL 인증서를 사용해야하는 페이지가있는 프로젝트에서 작업하고 있습니다. 이 페이지의 사이트 링크는 모두 http 대신 https를 사용하지만, 사용자가 직접 페이지로 이동할 수있는 경우 페이지의 http 버전이 자신에게 리디렉션되지만 https를 사용하기를 원합니다.ASP.NET : https로 리디렉션하는 모범 사례

page_load 이벤트에서 Response.Redirect를 수행 할 수 있습니다. 나는 postback을 일으킬 location.href를 업데이트 할 javascript를 작성할 수있다. 이 고양이를 껍질을 벗기는 방법이 더있을 것이라고 확신합니다. , HTTPS에 HTTP 페이지를 리디렉션 IIS 6 또는 7에 ASP.NET 사이트에 대한 가장 좋은 방법은 무엇 내 질문은

입니까? 모범 사례가 있습니까? 아니면 모든 대안이 동등합니까?

+0

FWIW -이 게시 및 몇 가지 다른 방법을 사용 한 후 길, 나는 다음과 같은 이전의 논의는 매우 도움이 발견 : http://stackoverflow.com/questions/47089/best-way-in-asp-net-to-force-https-for-an-entire-site –

답변

12

나는 그렇게 재 작성 URL을 사용하십시오. 왜? 구현하기 쉽고 응용 프로그램을 수정할 필요가 없기 때문에 유지 관리가 쉽습니다. IIS6에

<!-- http:// to https:// rule --> 
<rule name="ForceHttpsBilling" stopProcessing="true"> 
    <match url="(.*)billing/(.*)" ignoreCase="true" /> 
    <conditions> 
    <add input="{HTTPS}" pattern="off" ignoreCase="false" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 

당신이 제 3 자 라이브러리를 사용해야합니다 :

IIS7에서 당신은 예를 들어, URL rewrite module를 사용하는 것을 수행 할 수 있습니다. IIRF (http://www.codeplex.com/IIRF)를 사용하면 무료이며 안정적이며 많은 양의 기능이 있습니다.

+0

Pavel 예제를 추가해 주셔서 감사합니다. 나는 아직 IIS6에있어 IIS7의 다시 쓰기 모듈로 더러워지지 않았다. 그래도 유망 해 보입니다 :) – Ariel

1

page_load에서 Response.Redirect를 호출합니다. javascript를 생성하는 것보다 간단하며 클라이언트에 보내는 바이트 수가 줄어 듭니다.

Code example

+0

Ray -이 기능을 사용하면 전송되는 바이트 수가 줄어 듭니다. CodeFile 논리는 자바 스크립트 대신 모든 요청에서 전송됩니다.감사합니다. –

+0

js를 통해 리디렉션 할 때 js가 없거나 js가 비활성화 된 클라이언트에 대해서도 고려해야합니다. 그러면 응용 프로그램 보안이 떨어집니다. 서버 측 유효성 검사는 더 가볍고 안전합니다. – Ariel

2

사실 가장 좋은 방법은 옵션이 아닌 하드웨어 또는 IIS 설정을 가정하고, 1 ~ 3의 장소에서이 작업을 수행하는 것입니다. 그냥 코드 옵션. HttpModule을에서

  1. . 요청이 처리되기 전에 HttpModule이 실행되므로 URL 확인을 수행하고 리디렉션 할 수 있습니다. 이것이 내가하는 일이다.
  2. 에서 Global.asax.
  3. 사용자 정의 기본 페이지의 init 함수.

그 모든 좋은 옵션이 될 것입니다. 1과 2는 ASP.NET에서 처리하는 모든 요청에 ​​부딪치게됩니다. 세 번째 페이지에서는 모든 페이지가 기본 페이지에서 상속되도록해야합니다.

각 페이지에 코드를 넣지 않겠다는 것은 잘못된 프로그래밍입니다.

은 더 설명이 필요한 경우 알려줘, 그러나 이것은 좋은 시작이다.

+1

+1 매우 유효한 대답은 아무도 없습니다 DV'd –

1

는 일반적으로 하나가 항상 HTTPS 또는 HTTP되고 싶은 사이트의 특정 부분이 있습니다.

내가 하나 또는 다른 트래픽을 변환하려면 다음 action 속성을 사용

public class ForceConnectionSchemeAttribute : ActionFilterAttribute 
{ 
    private string scheme; 

    public ForceConnectionSchemeAttribute(string scheme) 
    { 
     this.scheme = scheme.ToLower(); 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     Uri url = filterContext.HttpContext.Request.Url; 
     if (url.Scheme != scheme) 
     { 
      string secureUrl = String.Format("{0}://{1}{2}", scheme, url.Host, url.PathAndQuery); 
      filterContext.Result = new RedirectResult(secureUrl); 
     } 
    } 
} 


// Suppose I always want users to use HTTPS to access their personal info: 
[ForceConnectionScheme("https")] 
public class UserController: Controller 
{ 
    // blah 
} 
+0

이 접근법은 MVC를 사용한다고 가정합니다. –

관련 문제