Citate magice - Magic quotes

Citatele magice au fost o caracteristică a limbajului de script PHP , în care șirurile sunt evadate automat - caracterele speciale sunt prefixate cu o inversare - înainte de a fi transmise. Acesta a fost introdus pentru a ajuta noii veniți să scrie comenzi SQL funcționale, fără a necesita scăparea manuală. Ulterior a fost descris ca destinat să împiedice dezvoltatorii fără experiență să scrie cod care era vulnerabil la atacurile de injecție SQL .

Această caracteristică a fost depășită oficial din PHP 5.3.0 și eliminată în PHP 5.4, din cauza problemelor de securitate.

Concept

Actuala revizuire a manualului PHP menționează că rațiunea din spatele citatelor magice a fost aceea de a „ajuta [a preveni] ca codul scris de începători să fie periculos”. Cu toate acestea, a fost introdus inițial în PHP 2, ca setare de timp de compilare php.h pentru msql, scăpând doar ghilimele unice, „facilitând trecerea datelor din formular direct la interogările msql”. Inițial, a fost conceput ca o „caracteristică de comoditate, nu ca o caracteristică de securitate”.

Utilizarea domeniului de aplicare pentru citatele magice a fost extins în PHP 3. ghilimele simple, ghilimele duble, backslash și caractere nule în toate datele furnizate de utilizator toate au un backslash prefixate pentru a le înainte de a fi trecut la script din $_GET, $_REQUEST, $_POSTși $_COOKIEvariabile globale. Dezvoltatorii pot folosi, în teorie, concatenarea cu șiruri pentru a construi interogări SQL sigure cu datele furnizate de utilizator. (Acest lucru a fost cel mai precis când PHP 2 și PHP 3 erau curente, deoarece bazele de date primare acceptate permit doar seturi de caractere cu 1 biți.)

Critică

Cotațiile magice au fost activate în mod implicit în noile instalații ale PHP 3 și 4, dar pot fi dezactivate prin directiva de configurare magic_quotes_gpc . Întrucât operațiunile citatelor magice s-au aflat în culise și nu au fost evidente imediat, dezvoltatorii ar putea să nu știe existența lor și potențialele probleme pe care le-ar putea introduce. Documentația PHP a evidențiat mai multe capcane și a recomandat ca, deși sunt activate în mod implicit, acestea să fie dezactivate.

Probleme cu ghilimele magice includ:

  • Nu toate datele furnizate de utilizator sunt destinate inserării într-o bază de date. Acestea pot fi redate direct pe ecran, stocate într-o sesiune sau previzualizate înainte de salvare. Acest lucru poate duce la adăugarea de backslashes acolo unde nu sunt dorite și arătate utilizatorului final. Acest bug se transformă adesea într-un software chiar utilizat pe scară largă.
  • Nu toate datele furnizate de utilizator și utilizate într-o interogare a bazei de date sunt obținute direct din surse protejate de citate magice. De exemplu, o valoare furnizată de utilizator ar putea fi introdusă într-o bază de date, protejată de ghilimele magice, iar ulterior preluată din baza de date și folosită într-o operație ulterioară a bazei de date. Această din urmă utilizare nu este protejată de citate magice, iar un programator naiv folosit pentru a se baza pe ele poate nu conștientizează necesitatea de a-l proteja în mod explicit.
  • Citatele magice folosesc, de asemenea, funcționalitatea generică oferită de funcția PHP addslashes(), care nu are cunoștință de Unicode și este încă supusă vulnerabilităților de injecție SQL în unele codări de caractere cu mai mulți octeți. mysql_real_escape_string()Sunt preferate funcții specifice bazei de date, cum ar fi sau, dacă este posibil, interogări pregătite cu parametri legați.
  • În timp ce multe sisteme de gestionare a bazelor de date acceptă scăparea cotațiilor cu o întârziere, standardul solicită de fapt utilizarea unui alt citat. Ofertele magice nu oferă nicio protecție pentru bazele de date care nu sunt configurate pentru a susține cotații care scapă cu o inversare.
  • Portabilitatea este o problemă dacă o aplicație este codificată cu presupunerea că ghilimele magice sunt activate și apoi sunt mutate pe un server unde sunt dezactivate sau invers.
  • Adăugarea de citate magice și eliminarea ulterioară a acestora, după caz, implică o cantitate mică dar inutilă de performanță.
  • Citatele magice nu protejează împotriva altor vulnerabilități comune de securitate, cum ar fi atacuri de scripturi între site-uri sau atacuri de antet de SMTP .

În noiembrie 2005, principalii dezvoltatori PHP au decis că, din cauza acestor probleme, funcția de citate magică va fi eliminată din PHP 6. Când dezvoltarea PHP 6 s-a oprit și dezvoltarea a continuat pe ramura 5.x, funcția a fost depreciată în PHP 5.3. 0 și eliminat în 5.4.

Alte abordări

  • Unele limbi precum Perl și Ruby optează pentru o abordare care implică redarea de date , în care datele din surse neîncredute, cum ar fi introducerea utilizatorului, sunt considerate „încărcate” și nu pot fi utilizate pentru operațiuni periculoase decât marcate explicit ca de încredere, de obicei după validare sau codare. . Întrucât construirea interogărilor SQL este considerată „periculoasă” în acest context, acest lucru obligă programatorul să abordeze problema. Depunerea nu rezolvă problema, dar evidențiază acele cazuri în care există o problemă, astfel încât programatorul să le poată rezolva în mod corespunzător.
  • Joel Spolsky a sugerat folosirea unei forme de notație maghiară care indică dacă datele sunt sigure sau nesigure.
  • Motoarele moderne de baze de date și bibliotecile folosesc interogări parametrizate pentru a transmite date în baza de date separat de comenzile SQL, reducând mult nevoia de a scăpa de date înainte de a construi interogările.

Vezi si

Referințe

linkuri externe