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