De obicei, scrie că nu se recomandă utilizarea (dacă există scriere - Ed.), Și toate. Ca urmare, de la sine, un programator care începe pur și simplu nu a dat seama de consecințele utilizării register_globals.
In acest articol voi încerca să iasă din rezervor toți cei care stau în ea, și să explice ce este ceea ce (mai ales pentru cei care sunt în tren. - nn). Toate aceleași, nu e de mirare unele gazde dezactiva această directivă. Deci ...
Despre cum funcționează
Setările PHP (php.ini fișier) este astfel Directiva register_globals. Sensul său stă în faptul că, dacă este activată (register_globals = pornit), toate variabilele transmise prin GET sau POST, și va fi înregistrată automat ca la nivel mondial. Ce înseamnă?
De exemplu, vom trece un script index.php Metoda GET o pagină de valoare: index.php pagina = 2 ?. Valoarea transmisă este stocată în matrice GET și pot fi utilizate în script-uri, cum ar fi $ _GET [ „pagina“]. Cu toate acestea, dacă am activat register_globals, apoi treci o valoare la pagina $, care este accesibil în orice parte a script-ul index.php va fi creat.
O mică sumă și adăugare. În cazul în care register_globals creează trei copii ale variabilei: în matrice GET, a GLOBALS matrice și o variabilă în sine ($ _GET [ „pagina“], $ GLOBALS [ „pagina“], pagina $), în timp ce oprit valoarea register_globals trecut poate Acesta este disponibil numai printr-o serie de GET ($ _GET [ „pagina“]). Amintit.
Să considerăm un exemplu simplu pentru a înțelege că strălucească (3 până la 5 ani. - nn). Pentru a face mai ușor, trebuie să spun că datele de conectare $ și $ parola - Această variabile au trecut metoda GET / POST.
Pe scurt despre ce face script-ul:Linia 2 face o cerere către baza de date cu scopul de a obține parola curentă pentru ID-ul de utilizator selectat.
Linia 3: Ia parola și atribuiți-l la un $ real_pass variabilă.
Linia 4: Comparați prezent și parola furnizate și în cazul în care se potrivesc, verificarea $ variabilă va fi setată adevărat.
Scenariul propus, prin definiție, cel mai sfânt în lume și acum am de gând să-ți arăt aceste găuri. Stare - register_globals este activat.
Să presupunem că există un transfer de metoda GET. Apoi, URL-ul va arăta similar cu următorul:
www.site.com/index.php?login = adminPassword = qwerty
Este clar că creează imediat o conectare la nivel mondial variabilă $ și $ parola. Și acum, uita-te la script-ul. În ea există un cec $ variabila. Și dacă trec printr-o adresă URL?
Cred că cineva a avut o întrebare, și în cazul în care instalația de cracare știu despre verificare de variabilă, ea este responsabil pentru tot? Dacă nu aveți unul pentru a arăta un scenariu, este puțin probabil să știe. Cu toate acestea, nu toate folosesc script-uri proprii, CMS, etc, și se bucură de ceea ce avem în rețea. În astfel de cazuri, de cracare, de exemplu, pot explora codul CMS și de a face atacuri asupra site-urile create cu ajutorul ei.
Cu toate acestea, nu toate hosterii register_globals este oprit, chiar dacă scripturile vor fi încarcerați la nici incluse register_globals, pirolizei ar putea rupe în continuare în scenariu, folosind o vulnerabilitate a acestei directive.
Luați exemplul nostru. Să-l protejeze în cazul register_globals este activată, este necesar, după linia if ($ parola == $ real_pass) $ cec = true; pentru a adăuga următoarele: $ = false cec altceva;. În acest caz, chiar dacă metoda GET va fi transferat la verificarea variabilă egală cu o, apoi script-ul cu parola incorectă se va instala în continuare cec $ = false.
Oh, și mă voi întoarce atenția asupra faptului că, dacă opriți register_globals este, că exemplul nostru nu va funcționa. Și pentru a face să funcționeze, este necesar să se scrie un script $ autentificare = $ _POST [ „conectare“]; $ Parola = $ _POST [ 'parola'];
și două concluzii principale:
1) Când este pornit register_globals poate transmite o varietate de variabile pentru care valorile obținute prin GET sau POST nu este calculată.
2) register_globals Nu atât de mult periculos în sine, cum strâmbă scenariu scris.
Vă dorim o săptămână de succes
Alexander Shuisky