
Ich habe URLhttps://myhost.test/de/searchResult?param=<
Ich möchte 404 zurückgeben, wenn der Abfrageparameter das Sonderzeichen „<“ enthält.
https://myhost.test/en/searchResult?param=test ----- Valid url
https://myhost.test/en/searchResult?param=<h1> ----- return 404
Ich habe es unten versucht, aber es funktioniert nicht
error_page 420 = @blockUrl;
location ~ ^/(en)/search {
if ($args ~* "q=<") {
return 420;
}
}
location @blockUrl{
return 404;
}
Kann mir bitte jemand helfen, wie ich das Vorhandensein von „<“ im Abfrageparameter blockieren kann?
Antwort1
In meinen Tests war die URL immer verschlüsselt in der Protokolldatei, egal wie ich sie eingegeben habe (kodiert oder nicht).
Hier sind zwei Möglichkeiten, um Ihre Anforderung zu erfüllen:
if ($args ~* (param=.*(%3C|%3E).*)) {
return 404;
}
oder
In Ihrem location
Block:
if ($err404) {
return 404;
}
Im http
Block (nicht innerhalb des server
Blocks!):
map $args $err404 {
~param=.*(%3C|%3E).* 1;
default 0;
}