IIS 커널 수준에서 바로 차단됩니다. 테스트 로 IIS의 모든 모듈을 꺼내서 정적 페이지 처리기가 없었으며 여전히 400 오류 메시지가 표시되었습니다.
IIS를 사용하여 해결할 수 있다고 생각하지 않습니다. 언급 한 레지스트리 설정은 다른 유형의 제한된 문자를위한 것입니다. 그 기능을 바꿀 수있는 수단을 보지 못했습니다.
당신의 목표는 그것을 피하는 것입니까? 공격 범위가 넓어졌으며 불완전한 URL 이스케이프 시퀀스를 차단하여 합법적 인 방문자가 손실되는 것을 상상할 수 없습니다.
업데이트 2 :
여기에 세 가지 훌륭한 링크가 있습니다. IIS 팀의 Nazim Lala와 Wade Hilmo는 귀하의 질문에 대한 토론으로 이에 대해 블로그를 작성했습니다. 또한 Scott Hanselman은 .NET의 querystring 부분에 대한 훌륭한 게시물을 보유하고 있습니다.
업데이트 :
나는 정식 답변을 얻기 위해 IIS 팀원과 확인했습니다. 그는 RFC 1738 ( http://www.ietf.org/rfc/rfc1738.txt ) 에 따르면 %는 안전하지 않은 문자로 간주됩니다 .
관련 텍스트는 다음과 같습니다.
위험한:
여러 가지 이유로 문자가 안전하지 않을 수 있습니다. 공백 문자는 유효하지 않은 공백이 사라지고 URL이 전사되거나 조판되거나 워드 프로세싱 프로그램의 처리를받을 때 중요하지 않은 공백이 생길 수 있으므로 안전하지 않습니다. "<"및 ">"문자는 자유 텍스트에서 URL 주위의 구분자로 사용되므로 안전하지 않습니다. 따옴표 ( "" ")는 일부 시스템에서 URL을 구분하는 데 사용됩니다."# "문자는 안전하지 않으며 월드 와이드 웹 및 다른 시스템에서 조각 / 앵커에서 URL을 구분하는 데 사용되므로 항상 인코딩해야합니다 식별자 그게 따를 수 있습니다. 그것은 다른 문자를 인코딩하는 데 사용됩니다 때문에 문자 "%가"안전하지 않은 것입니다. 게이트웨이 및 기타 전송 에이전트가 때때로 이러한 문자를 수정하는 것으로 알려져 있기 때문에 다른 문자는 안전하지 않습니다. 이러한 문자는 "{", "}", "|", "\", "^", "~", "[", "]"및 "`"입니다.
안전하지 않은 모든 문자는 항상 URL 내에 인코딩해야합니다. 예를 들어, 일반적으로 조각 또는 앵커 식별자를 처리하지 않는 시스템의 경우에도 "#"문자를 URL 내에 인코딩해야합니다. 따라서 URL을 사용하는 다른 시스템에 URL을 복사 할 경우 문자를 변경할 필요가 없습니다. URL 인코딩
따라서 IIS는 공격 수준을 최소화하기위한 사전 보안 조치 인 코어 수준에서이를 사전에 차단합니다.