IIS에서 요청 필터링 구성

키스 뉴먼과 로버트 맥머레이

이 문서에서는 일반적인 요청 필터 설정을 사용하여 IIS 8 웹 서버의 보안을 개선하는 방법을 보여 줍니다.

요청 필터는 IIS 8에서 처리하는 HTTP 요청 유형을 제한합니다. 요청 필터는 특정 HTTP 요청을 차단하여 잠재적으로 유해한 요청이 서버에 도달하는 것을 방지합니다. 요청 필터 모듈은 들어오는 요청을 검색하고 사용자가 설정한 규칙에 따라 원치 않는 요청을 거부합니다.

기본적으로 IIS는 중요한 코드 세그먼트를 찾아보는 요청을 거부합니다. 또한 일부 파일 이름 확장명 요청도 거부합니다.

서버 전체 수준에서 요청 필터를 구성한 다음 웹 사이트 수준에서 구성을 재정의할 수 있습니다.

필수 조건

이 자습서를 최대한 활용하려면 다음 운영 체제 중 하나를 실행하는 컴퓨터에 액세스할 수 있어야 합니다.

  • Windows Server® 2012
  • Windows® 8

일반 요청 필터 설정

일반 설정에는 다음과 같은 설정이 포함됩니다.

  1. 요청 필터에 대해 나열되지 않은 확장이 있는 파일에 대한 액세스를 허용할지 여부입니다.
  2. 나열되지 않은 HTTP 동사를 사용하는 요청을 허용할지 여부입니다.
  3. 높은 비트 문자(비 ASCII)를 포함하는 요청을 허용할지 여부입니다.
  4. 이중 인코딩된 요청을 허용할지 여부입니다.
  5. 요청된 콘텐츠의 최대 길이입니다.
  6. URL의 최대 길이입니다.
  7. 쿼리 문자열의 최대 크기입니다.

UI를 사용하여 일반 요청 필터 옵션을 구성하려면

  1. IIS 관리자를 열고 요청 필터를 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. 작업 창에서 기능 설정 편집을 클릭합니다.
  4. 요청 필터링 편집 설정 대화 상자에서 원하는 대로 설정을 편집한 다음 확인을 클릭합니다.

명령줄을 사용하여 일반 요청 필터 옵션을 구성하려면

상위 비트 문자 구성

상위 비트 문자를 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /allowhighbitcharacters:true|false

예를 들어 상위 비트 문자를 허용하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /allowhighbitcharacters:true

이중 이스케이프 구성

이중 이스케이프를 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /allowdoubleescaping:true|false

예를 들어 이중 이스케이프를 사용하도록 설정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /allowdoubleescaping:true

허용되는 최대 콘텐츠 길이 구성

허용되는 최대 콘텐츠 길이에 대한 값을 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:단위

변수 requestlimits.maxallowedcontentlength:단위 는 콘텐츠의 최대 길이를 지정합니다.

예를 들어 최대 콘텐츠 길이로 30000000을 지정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:30000000

허용되는 최대 URL 길이 구성

들어오는 URL의 최대 허용 길이에 대한 값을 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /requestlimits.maxurl:단위

변수 requestlimits.maxurl:단위 는 들어오는 URL의 최대 길이를 지정합니다.

예를 들어 4096을 최대 수신 URL 길이로 지정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /requestlimits.maxurl:4096

허용되는 최대 쿼리 문자열 길이 구성

들어오는 쿼리 문자열의 최대 허용 길이에 대한 값을 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /requestlimits.maxquerystring:단위

변수 requestlimits.maxquertystring:단위 는 들어오는 쿼리 문자열의 최대 길이를 지정합니다.

예를 들어 2048을 최대 수신 쿼리 문자열로 지정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /requestlimits.maxquerystring:2048

HTTP 헤더의 최대 크기 구성

특정 HTTP 헤더에 대한 크기 제한을 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='문자열',sizelimit='단위']

변수 header=문자열 은 이 제한이 적용되는 헤더를 지정합니다. 변수 sizelimit=단위 는 이 헤더의 최대 크기를 지정합니다.

예를 들어 contoso.com 값을 포함하는 헤더의 최대 크기를 2048로 지정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='contoso.com',sizelimit='2048']

파일 이름 확장명

추가하는 각 파일 이름 확장명에서 해당 파일 형식에 대한 요청을 허용할지 아니면 거부할지를 지정할 수 있습니다.

UI를 사용하여 파일 이름 확장명을 구성하려면

  1. IIS 관리자를 열고 요청 필터를 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. 파일 이름 확장명 탭을 선택합니다.
  4. 작업 창에서 파일 이름 확장명 허용 또는 파일 이름 확장명 거부를 클릭합니다.
  5. 상자에 파일 이름 확장명을 입력한 다음 확인을 클릭합니다.

명령줄을 사용하여 파일 이름 확장명을 구성하려면

목록에 없는 파일 이름 확장명 구성

IIS에서 목록에 없는 파일 이름 확장명을 처리하는 방법을 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:true|false

예를 들어 목록에 없는 파일 이름 확장명을 거부하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:false

WebDAV 요청에 대한 구성

파일 이름 확장명을 WebDAV 요청에 적용할지 여부를 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:true|false

예를 들어 파일 이름 확장 프로그램이 WebDAV 요청에 적용되지 않도록 IIS를 구성하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:false

파일 이름 확장명 추가 또는 제거

파일 이름 확장명을 추가하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='string',allowed='true | false']

변수 fileextension=문자열 은 허용하거나 거부할 파일 이름 확장명입니다.

예를 들어 파일 이름 확장명 .xxx에 대한 허용 규칙을 추가하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='.xxx',allowed='true']

파일 이름 확장명 .xxx에 대한 규칙을 제거하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /-fileExtensions.[fileextension='.xxx']

필터링 규칙

IIS 8을 사용하면 들어오는 요청에 적용되는 사용자 지정 필터 규칙을 정의할 수 있습니다. 이 기능을 사용하여 다음을 수행할 수 있는 필터를 정의할 수 있습니다.

  1. 요청 URL을 검색합니다.
  2. URL에 포함된 쿼리 문자열을 검색합니다.
  3. 특정 헤더 필드를 검색합니다.
  4. 필터가 적용되는 파일 이름 확장명을 정의합니다.
  5. 거부할 문자열을 정의합니다.

UI를 사용하여 필터링 규칙을 구성하려면

  1. IIS 관리자를 열고 요청 필터를 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. 규칙 탭을 선택합니다.
  4. 작업 창에서 필터링 규칙 추가를 두 번 클릭합니다.
  5. 이름 상자에 필터링 규칙의 이름을 입력합니다.
  6. URL을 검색하려면 검색 URL 검사 상자를 선택합니다.
  7. 쿼리 문자열을 검색하려면 쿼리 문자열 검사 검사 상자를 선택합니다.
  8. 스캔 헤더 아래에 검색할 하나 이상의 헤더를 입력합니다.
  9. 적용 대상에서 규칙이 적용되는 파일 이름 확장명을 하나 이상 입력합니다.
  10. 거부 문자열 아래에 거부하려는 문자열을 하나 이상 입력합니다.
  11. 확인을 클릭합니다.

숨겨진 세그먼트

이 기능을 사용하면 URL 세그먼트가 포함된 요청(예: 폴더 이름)을 거부할 수 있습니다.

UI를 사용하여 숨겨진 세그먼트를 구성하려면

  1. IIS 관리자를 열고 요청 필터를 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. 숨겨진 세그먼트 탭을 선택합니다.
  4. 작업 창에서 숨겨진 세그먼트 추가를 클릭합니다.
  5. 상자에 URL 세그먼트를 입력한 다음 확인을 클릭합니다.

명령줄을 사용하여 숨겨진 세그먼트를 구성하려면

WebDAV 요청에 대한 구성

숨겨진 세그먼트가 WebDAV 요청에 적용되는지 여부를 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:true|false

예를 들어 숨겨진 세그먼트가 WebDAV 요청에 적용되지 않도록 IIS를 구성하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:false

숨겨진 세그먼트 추가

숨겨진 세그먼트를 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /+hiddensegments.[segment='string']

변수 segment=문자열 은 숨겨진 URL 세그먼트를 지정합니다.

예를 들어 /bin이 숨겨진 세그먼트임을 지정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /+hiddensegments.[segment='/bin']

URL 필터링

지정된 URL을 허용하도록 IIS를 구성할 수 있습니다. 또한 지정된 URL 시퀀스를 거부하도록 구성할 수 있습니다.

UI를 사용하여 URL 필터링을 구성하려면

  1. IIS 관리자를 열고 요청 필터를 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. URL 탭을 선택합니다.
  4. 작업 창에서 URL 허용 또는 거부 시퀀스를 선택합니다.
  5. 상자에 URL 또는 URL 시퀀스를 입력하고 확인을 클릭합니다.

명령줄을 사용하여 URL 필터링을 구성하려면

URL 시퀀스를 거부하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='string']

변수 sequence=문자열 은 URL에서 IIS가 구문 분석할 수 없는 문자 시퀀스를 지정합니다.

예를 들어 IIS가 두 마침표가 포함된 URL을 구문 분석하지 않도록 지정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='..']

HTTP 동사

IIS 8이 요청의 일부로 수락하는 동사 목록을 정의할 수 있습니다. IIS가 이 기능을 기반으로 요청을 거부하면 기록된 오류 코드는 404.6입니다.

UI를 사용하여 목록에 없는 HTTP 동사를 구성하려면

  1. IIS 관리자를 열고 요청 필터를 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. HTTP 동사 탭을 선택합니다.
  4. 작업 창에서 동사 허용 또는 거부 동사를 클릭합니다.
  5. 상자에 동사를 입력한 다음 확인을 클릭합니다.

명령줄을 사용하여 목록에 없는 HTTP 동사를 구성하려면

목록에 없는 HTTP 동사 구성

IIS에서 목록에 없는 동사를 처리하는 방법을 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /verbs.allowunlisted:true|false

예를 들어 목록에 없는 동사를 거부하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /verbs.allowunlisted:false

WebDAV 요청에 대한 구성

동사 필터링이 WebDAV 요청에 적용되는지 여부를 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /verbs.applyToWebDAV:true|false

예를 들어 동사 필터링이 WebDAV 요청에 적용되지 않도록 IIS를 구성하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /verbs.applyToWebDAV:false

HTTP 동사 추가

필터링할 동사를 구성하려면 다음 구문을 사용합니다.

appcmd set config /section:requestfiltering /+verbs.[verb='string',allowed='true|false']

변수 verb=문자열 은 이 제한이 적용되는 동사를 지정합니다.

예를 들어 GET이 허용되도록 지정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.

appcmd set config /section:requestfiltering /+verbs.[verb='GET',allowed='true']

헤더 크기 제한

성능 및 보안을 향상시키기 위해 HTTP 요청 헤더의 크기를 제한할 수 있습니다. 헤더는 HTTP 트랜잭션의 운영 매개 변수를 정의하는 이름/값 쌍입니다.

UI를 사용하여 헤더 크기 제한을 구성하려면

  1. IIS 관리자를 열고 요청 필터를 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. 머리글 탭을 선택하고 머리글 추가를 클릭합니다.
  4. 머리글 상자에 머리글 필드 이름을 입력합니다.
  5. 크기 제한 상자에 헤더 크기 제한을 나타내는 양의 정수(바이트)를 입력합니다.
  6. 확인을 클릭합니다.

쿼리 문자열

요청된 URL에 포함된 특정 쿼리 문자열을 허용하거나 거부하도록 IIS 8을 구성할 수 있습니다. 예를 들어 요청 URL에서 거부된 쿼리 문자열이 발견되면 요청이 거부됩니다.

UI를 사용하여 쿼리 문자열을 구성하려면

  1. IIS 관리자를 열고 요청 필터링을 구성할 수준을 선택합니다.
  2. 기능 보기에서 요청 필터링을 두 번 클릭합니다.
  3. 쿼리 문자열 탭을 선택하고 쿼리 문자열 허용 또는 쿼리 문자열 거부를 클릭합니다.
  4. 쿼리 문자열 상자에 쿼리 문자열을 입력합니다.
  5. 확인을 클릭합니다.

요청 필터 로깅

IIS 로깅을 사용하여 요청 필터 구성을 평가하고 최적화할 수 있습니다.

다음 표에서는 로그에 표시되는 요청 필터 오류 코드를 보여 줍니다.

오류 설명 상태 코드
요청 필터링: URL 시퀀스가 거부됨 404.5
요청 필터링: 동사가 거부됨 404.6
요청 필터링: 파일 이름 확장명 거부됨 404.7
요청 필터링: 숨겨진 세그먼트에 의해 거부됨 404.8
요청 필터링: URL이 이스케이프를 두 배로 늘렸기 때문에 거부됨 404.11
요청 필터링: 높은 비트 문자로 인해 거부됨 404.12
요청 필터링: URL이 너무 길어서 거부됨 404.14
요청 필터링: 쿼리 문자열이 너무 길어서 거부됨 404.15
요청 필터링: 콘텐츠 길이가 너무 커서 거부됨 413.1
요청 필터링: 요청 헤더가 너무 길어서 거부되었습니다. 431

참고 항목