
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;
}