Puncte:1

Nginx potrivește orice cuvânt din declarația if, cu excepția unuia

drapel cn

Folosesc următoarea instrucțiune if regex in nginx config pentru a potrivi și a bloca unele solicitări greșite în interiorul cererii uri. Aceste interogări proaste solicită întotdeauna un singur argument, dar de fiecare dată cu nume aleatoriu (și număr alfanumeric). De asemenea, accesează întotdeauna pagina de pornire.

Exemplu de interogare greșită: /?some1bad0query2=nminkvywbjfdysnvhp

dacă ($request_uri ~ "[\w]{5,25}\=[\w]{5,25}$") {
  întoarce 403;
}

Cum pot modifica această expresie regex pentru a exclude potrivirea unor nume de argument, cum ar fi cheie sau interogare (adică /?query=somestring) ?

Am încercat să folosesc paranteze rotunde și ?(!interogare) dar fara noroc.

Vă rog să mă ajutați să corectez această declarație regex. Mulțumesc anticipat.

Richard Smith avatar
drapel jp
Este doar un exemplu slab, deoarece `query=somestring` oricum nu se potrivește cu expresia dvs. regulată, deoarece `query` are mai puțin de 6 caractere?
drapel cn
da cu siguranta a fost gresit. s-a corectat regex pentru a începe cu un nume de argument de 5 lungime (interogare). dar încă am nevoie de un exemplu despre cum pot atenua acest atac și să ocolesc lista albă de astfel de argumente bune (cum ar fi interogare, căutare etc.)
Puncte:0
drapel jp

Există două moduri de a face acest lucru. Folosește o afirmație negativă privind anticiparea sau folosiți a Hartă.

De exemplu:

if ($request_uri ~ "(?!query)\w{5,25}=\w{5,25}$") { returnează 403; }

Avantajul Hartă este că expresiile regulate sunt evaluate în ordine până când este găsită o potrivire, astfel încât expresiile complexe de anticipare pot fi evitate.

De exemplu:

harta $request_uri $reject {
    ~*^/\?query= 0;
    „~*^/\?\w{5,25}=\w{5,25}$” 1;
}
Server {
    ...
    if ($reject) { return 403; }
    ...
}

The Hartă blochează vieți în afara Server bloc. Dacă regula se aplică numai URI-urilor care încep cu /?, ar trebui să adăugați asta la expresia regulată (după cum se arată în cel de-al doilea exemplu).

drapel cn
Mulțumesc, Richard! Harta pare a fi o soluție mai elegantă pentru mine. Testat si functioneaza impecabil. Btw. greșeala mea în declarația if a fost că am pus ?! bloc după argument

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.