如果查询参数包含特殊字符“

如果查询参数包含特殊字符“

我有网址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;
}

相关内容