개인정보나 비밀번호와 같은 중요정보들이 HTTP로 전송될 경우에는 네트워크 상에서 평문으로 전송되기 때문에 보안 상 좋지 않다.
따라서 HTTP로 요청하였을 때에는 보안상 좋은 HTTPS로 통신을 하도록 강제화해주는 것이 좋다.
아래는 IIS10 기준으로 web.config에 설정해주는 사항이다.
아래 사항은 URL Rewrite module을 설치 후 web.config 내 inbound rule에 추가하여 수정하면 된다.
<system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> |
이제는 각 항목에 대하여 알아보도록 하자.
1. stopProcessing="true"
- StopProcessing은 기본적으로 꺼져있으므로 켜주어야 한다.
- 룰의 규칙에 매칭되어 동작을 할 때 이 flag가 켜져있다면 그것은 더 이상 다음의 룰들을 동작시키지 않고 요청을 바로 IIS request 파이프라인으로 전달하는 것을 의미한다.
2. ignoreCase="true"
- condition에 대하여 패턴 매칭을 할 때 이 속성값을 사용하여 대소문자 구분을 할지 안할지 선택한다.
3. <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
- 리다이렉트를 설정해주며 redirectType을 Permanent로 설정함으로써 응답코드가 301로 오게된다.
- url 값을 통해 리다이렉트되는 url을 설정해주는데 {R:1} 부분은 match url="(.*)"의 첫번째 괄호에 매칭된 문자열로 변환된다.
※ 역참조 추가설명 (참고 : https://nicolas.guelpa.me/blog/2015/02/21/rewrite-redirect-iis.html)
위에서 사용된 R:1이라는 것은 역참조이다. 만약 요청된 URL의 부분 혹은 전체를 이용하여 action을 수행하고 싶다면 역참조를 이용할 수 있다.
{R:0}은 입력된 문자열 전체를 의미하고 {R:1}은 첫번째 괄호에 매칭된 문자열을 의미한다.
예를 들어 패턴이 (.*)일 때 http://rootable.tistory.com/backReference 라는 URL이 있을 때 다음과 같이 표현된다.
{R:0} = backReference
{R:1} = backReference
왜냐하면 첫번째 괄호에 해당하는 패턴이 모든 문자열을 의미하기 때문이다.
만약 패턴이 (back)(.*)일 때 http://rootable.tistory.com/backReference 라는 URL이 있을 때 다음과 같이 표현된다.
{R:0} = backReference
{R:1} = back