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

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

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

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

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

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

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

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

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



답변

*문자는 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");


답변

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

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

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

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

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


답변

나를 위해, 나는 웹 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


답변

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


답변

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

예 :

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

그것은 있어야했다 :

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


답변

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

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


답변

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