Care este register_globals?
Aceasta este o opțiune în php.ini, ceea ce indică necesitatea de înregistrare a variabilelor obținute prin metoda POST sau GET în matrice globale $ GLOBALS.
Pentru a da un exemplu de claritate, atunci când register_globals = pe.
Există un fișier «index.php» cu conținutul:
Același exemplu, dar cu register_globals = off:
astfel nu o variabilă locală și manipulare a fost creat cu «$ asd» avem nevoie pentru a utiliza un array $ _GET.
Poate că acum ați răzgândit register_globals.
Probabil, va avea ceva să rescrie programele lor, dar merita.
Și acum am să-ți spun cum un atacator poate folosi această opțiune pentru propriile lor scopuri, adică când register_globals = pe
Voi începe de la simplu la complex.
De multe ori vedem un avertisment:
Observație: Undefined variable: asd (nume de variabile) ****
Ce înseamnă? Acest lucru înseamnă că variabila «$ asd» nu a fost definit în mod clar.
De exemplu, unii oameni răsfățați-vă în acest:
Să presupunem că scriem un sistem de autentificare a utilizatorului:
Acest lucru nu s-ar fi întâmplat dacă am fi scris acest lucru:
Ie Am definit $ valid_user variabila, la FALSE în caz de eșec.
Vom continua ...
Acum, utilizați isset () funcția devine nesigură, deoarece oricine poate înlocui variabila pe el plăcut.
Iată un exemplu din sql-injecție:
SELECT id, titlul, descrierea din tabelul unde id = 0
UNION ALL SELECT de conectare, parola, null admin în cazul în care FROM de conectare = 'admin'
Iar atacatorul devine aspectul și parolele dvs. :(
După cum puteți vedea toate exemplele sunt gauri de securitate care pot fi operate prin intermediul register_globals incluse.
Face față unor astfel posibilă în cazul în care definesc întotdeauna o variabilă, indiferent de condițiile. Sau utilizați încapsularea variabile în funcții, și anume Când definiți o funcție, variabilele care în interiorul acestuia va fi închisă din exterior, cum ar fi:
Mă pot gândi mult mai multe exemple, dar cred că am dat ție va fi suficientă pentru a înțelege.
Vreau să spun că toate aceste probleme un lucru de vară, atunci când setați register_globals = off opțiune și încercați din nou toate exemplele de mai sus.
Acest lucru se poate face în php.ini, dar majoritatea furnizorilor de hosting nu permit acest lucru, astfel că este necesar să se utilizeze un fișier «.htaccess»
Creați un fișier numit. htaccess
Scriem să-l:
php_flag register_globals off
Și acum unele dintre problemele de securitate au fost rezolvate :)
Un pic despre mine un motiv pentru a scrie acest articol:
Personal, eu nu am folosit register_globals = pornit, deoarece Am crezut că a fost ilogic. Așa că am știut că acesta este un alt „+“ la memoriul în apărare. Dar din plin nu am dat seama cât de mult poate fi periculos. Sa întâmplat când am decis să scrie GSMgen - generator de Sitemapul Google, care ar fi trebuit să funcționeze în condiții de siguranță și când register_globals. Când am început să-l test, am fost șocat ... pentru că îmi place să folosesc funcția isset (), am găsit în vulnerabilitatea ei imediată, iar în acest proces a trebuit să abandoneze acest :( ce sa fac ...