다음을 통해 공유


schemeSettings에 대한 <add> 요소(URI 설정)

구성표 이름에 대해 구성표 설정을 추가합니다.

<add 
   name = "http|https" genericUriParserOptions="DontUnescapePathDotsAndSlashes"
/>

특성 및 요소

다음 단원에서는 특성, 자식 요소 및 부모 요소에 대해 설명합니다.

특성

특성

설명

name

이 설정이 적용되는 스키마 이름입니다. 지원되는 유일한 값은 name="http" and name="https"입니다.

{Attribute name} 특성

설명

genericUriParserOptions

이 구성표의 파서 옵션입니다. 지원되는 유일한 값은 genericUriParserOptions= "DontUnescapePathDotsAndSlashes"입니다.

자식 요소

없음

부모 요소

요소

설명

<schemeSettings>

특정 스키마에 대해 Uri가 구문 분석되는 방식을 지정합니다.

설명

기본적으로 System.Uri 클래스는 경로 압축을 실행하기 전에 백분율로 인코딩된 경로 구분 기호를 이스케이프 해제합니다. 다음과 같은 공격에 대한 보안 메커니즘으로 구현되었습니다.

https://www.contoso.com/.. %2F.. %2F/Windows/System32/cmd.exe?/c+dir+c:\

이 URI가 백분율 인코딩된 문자를 올바르게 처리하지 못하는 모듈을 전달한 경우 서버에서 다음 명령이 실행될 수 있습니다.

c:\Windows\System32\cmd.exe /c dir c:\

따라서, System.Uri 클래스가 먼저 경로 구분 기호에서 이스케이프 해제되고 경로 압축을 적용합니다. 위의 악의적인 URL을 System.Uri 클래스 생성자에 전달하면 다음 URI가 됩니다.

https://www.microsoft.com/Windows/System32/cmd.exe?/c+dir+c:\\

이 기본 동작은 특정 스키마에 대한 schemeSettings 구성 옵션을 사용하여 이스케이프 해제 백분율로 인코딩된 경로 구분 기호가 아닌 값으로 수정할 수 있습니다.

구성 파일

이 요소는 응용 프로그램 구성 파일이나 컴퓨터 구성 파일(Machine.config)에 사용할 수 있습니다.

예제

다음 코드 예제에서는 http 스키마에서 백분율 기호로 인코딩된 경로 구분 기호를 이스케이프하지 않아도 되도록 지원하는 Uri 클래스에서 사용하는 구성을 보여줍니다.

<configuration>
  <uri>
    <schemeSettings>
      <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
    </schemeSettings>
  </uri>
</configuration>

참고 항목

참조

네트워크 설정 스키마

System.Configuration.SchemeSettingElement

System.Configuration.SchemeSettingElementCollection

System.Configuration.UriSection

UriSection.SchemeSettings

System.GenericUriParserOptions

System.Uri