
Wer einen NGINX-Server online stellt und ihn sich access.log
eine Woche später ansieht, wird feststellen, dass jede Menge Versuche zum Ausnutzen von URLs unternommen werden. Jeden Tag, zu jeder Zeit.
Was wäre, wenn ich alle URL-Parameter ablehnen würde? Was wäre, wenn jede Abfragezeichenfolge mit einem NGINX maskiert wäre, rewrite
das mit nichts übereinstimmt, was nicht als rewrite
natürlich definiert definiert ist und eine 404-Fehlermeldung zurückgibt?
Oder eine Reihe von Neuschreibungen in der Reihenfolge, in der sie innerhalb dieses stets vorhandenen Standortblocks platziert werden?
location / {
rewrite "^/api/v1/users/?$" /api/v1/Users.php last;
rewrite "^/api/v1/users/(all|active|inactive)?$" /api/v1/Users.php?status=$1 last;
rewrite "^/api/v1/users/(\d+)/?$" /api/v1/Users.php?userId=$1 last;
}
# URL Match examples...
http://localhost/api/v1/users
http://localhost/api/v1/users/
http://localhost/api/v1/users/all
http://localhost/api/v1/users/active
http://localhost/api/v1/users/inactive
http://localhost/api/v1/users/2001
http://localhost/api/v1/users/2002
http://localhost/api/v1/users/2003
Gibt es eine Möglichkeit, NGINX anzuweisen, URL-Parameter zu ignorieren? Lassen Sie es mich wissen, wenn dies eine naive Frage ist. Vielleicht stelle ich die falsche Frage.
Antwort1
Verwenden Sie lieber return
statt rewrite
weil„Umschreibedirektive kann nur Code 301 oder 302 zurückgeben“. Erstellen Sie dazu ein location
mit einem regulären Ausdruck, um die spezifische Anforderungs-URI abzufangen.
Und wenn Sie alle diese Anfragen einfach löschen möchten, geben Sie eineHTTP-Status 444.
Beispiel:
server {
# ...
location ~* ^/api/v1/users/.*$ {
return 444;
}
}