클라이언트에서 잠재적으로 위험한 Request.Path 값이 발견되었습니다 (*)


218

다소 자기 설명 오류가 나타납니다.

클라이언트에서 잠재적으로 위험한 Request.Path 값이 발견되었습니다 (*).

이 문제는 *요청 URL에서 발생합니다 .

https://stackoverflow.com/Search/test*/0/1/10/1

이 URL은 'test *'가 검색어이고 나머지 URL이 다양한 다른 필터와 관련된 검색 페이지를 채우는 데 사용됩니다.

URL에 이러한 특수 문자를 허용하는 쉬운 방법이 있습니까? 을 수정하려고했지만 web.config아무 소용이 없습니다.

특수 문자를 수동으로 인코딩 / 디코딩해야합니까? 또는이 작업을 수행하는 가장 좋은 방법이 있습니까? 쿼리 문자열 사용을 피하고 싶습니다. -그러나 옵션 일 수 있습니다.

응용 프로그램 자체는 c# asp.net라우팅을 사용하여 위의 멋진 URL을 생성하는 웹 양식 응용 프로그램입니다.


1
페이지 ValidateRequest=false상단에 있습니까?
닐 나이트

웹 사이트가 내부적으로 리디렉션을 시도하는 이유가 무엇인지 모르겠습니다 . ASP.net 파이프 라인이 왜 위험한 요청 URL로 간주하는지 모르겠습니다.
RBT

답변:


97

*문자는 URL의 경로에서 허용하지만, 쿼리 문자열을 사용에는 문제가 없습니다되지 않습니다

http://localhost:3286/Search/?q=test*

인코딩 문제 *는 아니며 문자는 URL에서 특별한 의미가 없으므로 URL 인코딩 여부는 중요하지 않습니다. 다른 체계를 사용하여 인코딩 한 다음 디코딩해야합니다.

예를 들어, 임의의 문자를 이스케이프 문자로 사용하는 경우 :

query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");

그리고 디코딩 :

query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");

15
"xxx" "xxy" "xyy"게임은 꽤 영리합니다. 독자를 혼동하지 않도록 그 배후의 논리를 자세히 설명하고 싶을 수도 있습니다.
SimpleVar

2
요청이 PATH쿼리 문자열이 아닌에 사용되었습니다 .
휴고 Delsing

매개 변수 중 하나가 URL 인 동일한 시나리오에 부딪 쳤습니다. URL을 올바르게 인코딩 하더라도이 오류가 발생합니다. 마지막으로 매개 변수를 base64로 인코딩하고 (내 API에서 디코딩) 진행 상황을 파악하는 것보다 훨씬 쉽습니다. 아마도 자신의 교체 루틴을 구현하는 것이 더 나은 선택 일 것입니다.
SpokaneDJ

1
aa<=> aab<=> *을 더 간단한 인코딩 체계로 사용할 수 없습니까 ?
Jared와 같은 단어

지금은 이것이 저를 구했습니다. 감사합니다. 그러나 적절한 시간에 나는이 조언을 확인하고 싶습니다 : stackoverflow.com/a/603962/1830909 그리고 나는 당신의 생각을 듣고 기뻐할 것입니다.
QMaster

316

.NET 4.0을 사용하는 경우 web.config를 통해 이러한 URL을 허용 할 수 있어야합니다.

<system.web>
    <httpRuntime 
            requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

방금 별표 (*)를 제거했습니다. 원래 기본 문자열은 다음과 같습니다.

<httpRuntime 
          requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?" />

자세한 내용은 이 질문 을 참조하십시오.


5
액션에 mvc 속성을 사용 하여이 작업을 수행 할 수있는 방법이 있으므로 전체 앱 에서이 기능을 해제하지 않아도됩니까? 이 답변과 유사합니다 : stackoverflow.com/a/1540976/298758
longda

4
@longda : 아마도 필요한 URL에 대한 <location path = "my / path"> 요소로 감싸보십시오. 리플렉션 사용은 글로벌 관점에서 합리적으로 간단하지만 컨트롤러 / 액션별로 설정하는 것이 확실하지 않습니다. 질문이 있을까요?
Dave Transom

viewStart에서 레이아웃을 결정하기 위해 실행 프로세스를 수신하는 ASP.net MVC 프로젝트에서는 작동하지 않습니다. 경로에 잘못된 문자가 있습니다.
QMaster

7

나를 위해, 나는 웹 API 2.0으로 .net 4.5.2에서 일하고 있는데, 같은 오류가 있습니다. requestPathInvalidCharacters에 requestPathInvalidCharacters = ""를 추가하여 설정했습니다. 이 문제가 발생합니다.

<system.web>
     <httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
     <pages  >
      <namespaces>
     ....
 </namespaces>
    </pages> 
  </system.web>

**이 방법은 좋지 않습니다. 개체의 속성이 더 좋거나 특수 문자를 인코딩하려고하면이 매개 변수가있는 게시물 일 수 있습니다. -나머지 API 디자인을위한 모범 사례를 검색 한 후 검색, 정렬 및 페이지 매김에서 다음과 같이 쿼리 매개 변수를 처리해야한다는 것을 알았습니다.

/companies?search=Digital%26Mckinsey

이 방법으로 우리는 URL을 인코딩하고 % 26로 remplace 할 때 문제를 해결합니다. 서버에서 올바른 매개 변수 Digital & Mckinsey를받습니다.

이 링크는 나머지 웹 API 디자인의 모범 사례에 도움이 될 수 있습니다 https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9


6

경로 값을 인코딩 한 다음 검색하기 전에 값을 디코딩해야합니다 (필요한 경우).


답변 주셔서 감사합니다. effectivley가 *와 같은 항목을 대체 한 다음 읽을 때 다시 대체한다는 의미입니까?

값을 인코딩하고 디코딩하는 코드 예제를 보여줄 수 있습니까?
Ciaran Gallagher

1

나에게 URL을 입력 할 때 실수로? 대신 /를 사용했습니다. 쿼리 매개 변수를 시작하려면

예 :

url.com/endpoint/parameter=SomeValue&otherparameter= 다른 + 값

그것은 있어야했다 :

url.com/endpoint?parameter=SomeValue&otherparameter= 다른 + 값


예, 심지어 같은 나를 위해 url.com/endpoint¶meter=SomeValue&otherparameter=AnotherValue
Bhargav KONDA

0

이 예외는 내 응용 프로그램에서 발생했으며 다소 오도되었습니다.

JSON 배열 객체를 전달하여 ajax 메소드 호출을 사용하여 .aspx 페이지 웹 메소드를 호출 할 때 발생했습니다. 웹 페이지 메서드 서명에는 강력한 형식의 .NET 개체 인 OrderDetails 배열이 포함되어 있습니다. Actual_Qty 특성은 int로 정의되었으며 JSON 오브젝트 Actual_Qty 특성은 "4"(추가 공백 문자)를 포함했습니다. 추가 공간을 제거한 후 변환이 가능해졌으며 웹 페이지 메소드가 ajax 호출에 의해 성공적으로 도달했습니다.


0

웹 프로젝트의 서버가 IIS Express 인 경우 로컬 IIS로 올바르게 설정하십시오. 프로젝트 URL이 올바른지 확인하고 가상 디렉토리를 작성하십시오.


0

URL (Uniform Resource Locator)을 다룰 때 특정 구문 표준이 있으며,이 특정 상황에서 우리는 예약 문자를 다룹니다 .

최대로 RFC 3986 , 예약 문자는 (또는하지 않을 수 있습니다) 각 제도 별 구문에 의해, 일반 구문에 의해 구분 기호로 정의하거나 할 수있는 URI의 역 참조 알고리즘의 구현 고유의 구문에 의해; 그리고 별표 (*)는 예약 된 문자입니다.

가장 좋은 방법은 URL에서 예약되지 않은 문자 를 사용 하거나 인코딩을 시도하는 것입니다.

파고 계속 :


1
이 오류는 URL의 예약 문자가 예를 들어 %25대신에 백분율로 인코딩 된 경우에도 발생 %하므로 IIS가 완벽하게 유효한 URL에 대해이 오류를 반환 할 수 있습니다.
Florian Winter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.