쿼리 매개변수에 특수 문자 '

쿼리 매개변수에 특수 문자 '

URL이 있습니다https://myhost.test/en/searchResult?param=<

쿼리 매개변수에 특수 문자 '<'가 있는 경우 404를 반환하고 싶습니다.

https://myhost.test/en/searchResult?param=test ----- Valid url

https://myhost.test/en/searchResult?param=<h1>    ----- return 404

아래에서 시도했지만 작동하지 않습니다.

   error_page 420 = @blockUrl;
   location ~ ^/(en)/search {
     if ($args ~* "q=<") {
        return 420;
     }
  }
 location @blockUrl{
    return 404;
 }

누군가 쿼리 매개변수에 '<'가 있는 것을 어떻게 차단할 수 있는지 도와주실 수 있나요?

답변1

내 테스트에서는 URL을 어떻게 입력했는지(인코딩 여부)에 관계없이 항상 로그 파일에 인코딩됩니다.
귀하의 요구 사항을 충족할 수 있는 두 가지 방법은 다음과 같습니다.

if ($args ~* (param=.*(%3C|%3E).*)) {
   return 404;
}

또는

귀하의 블록에서 location:

if ($err404) {
   return 404;
}

블록 내 http( server블록 내부가 아님!):

map $args $err404 {
        ~param=.*(%3C|%3E).*            1;
        default                         0;
}

관련 정보