Ce este injectarea SQL?

Una dintre cele mai mari clase de vulnerabilități web este cunoscută sub numele de „SQL Injection” sau SQLi. Structured Query Language, alias SQL, este limbaj folosit pentru a interacționa cu majoritatea bazelor de date, deși sunt utilizate o serie de variante ale limbajului în funcție de baza de date platformă. Orice site web care stochează date despre utilizator, cum ar fi informații despre cont, sau oferă funcționalitate de încărcare a utilizatorului, cum ar fi un site web de găzduire a imaginilor, va folosi o bază de date pentru a stoca acele date.

Sfat: SQL este în general fie pronunțat „ess cue ell” sau „sequel”, prima opțiune fiind mai frecventă în engleza britanică, iar a doua mai răspândită în engleza americană. Ambele pronunții sunt în general înțelese în contextul vorbirii despre baze de date.

Ce este SQLi?

SQLi este o vulnerabilitate în care dezvoltatorii web care proiectează codul care comunică între serverul web și baza de date nu implementează protecții împotriva comenzilor SQL trimise de a utilizator. Problema este că este posibil să puteți scăpa din instrucțiunile bazei de date și să adăugați argumente noi sau o declarație complet nouă. Declarația de bază de date modificată sau a doua poate efectua o serie de acțiuni, inclusiv ștergeri potențial la scară mare sau scurgeri de date.

Exploit-urile se învârt în mod obișnuit în a face afirmațiile existente să fie adevărate în toate circumstanțele sau în furnizarea unei a doua comenzi în loturi care efectuează o acțiune specifică, cum ar fi ștergerea sau afișarea tuturor datelor. De exemplu, o instrucțiune SQL pentru a vă conecta la un site web poate verifica dacă numele de utilizator și parola trimise se potrivesc cu o intrare din baza de date. Pentru a încerca să obțineți acces la un exploit de injecție SQL, puteți încerca să adăugați o clauză „sau adevărată”, cum ar fi „sau 1=1”. Acest lucru ar face comanda de-a lungul liniilor de „autentificare cu [acest] nume de utilizator, dacă parola este [aceasta], sau această afirmație este adevărată”.

Cum să preveniți SQLi

SQLi era o modalitate foarte obișnuită pentru site-uri web de a avea baza de date violată și apoi scursă online. Datorită unui efort concertat de a se asigura că conștientizarea securității face parte din formarea dezvoltatorilor, această clasă de vulnerabilități a fost în mare măsură rezolvată și se mai vede rar.

Metoda corectă de a preveni SQLi este utilizarea instrucțiunilor pregătite, cunoscute și sub numele de interogări parametrizate. În mod tradițional, instrucțiunile SQL sunt declarate și au intrarea utilizatorului concatenată în ele în timpul respectivei declarații. Cu instrucțiunile pregătite, comanda bazei de date este scrisă și apoi o funcție sperate rulează comanda și inserează datele utilizatorului. Deși aceasta poate părea o diferență minoră, schimbă complet modul în care este gestionată comanda. Diferența împiedică executarea oricăror comenzi SQL semnificative și tratează toate intrările utilizatorului ca pe un șir, prevenind injectarea SQL.