![如果查询参数包含特殊字符“](https://linux22.com/image/761134/%E5%A6%82%E6%9E%9C%E6%9F%A5%E8%AF%A2%E5%8F%82%E6%95%B0%E5%8C%85%E5%90%AB%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E2%80%9C.png)
我有网址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;
}