Ce este o injecție SQL? [Explică-i pe MakeUseOf]
Lumea securității pe Internet este afectată de porturi deschise, backdoors, găuri de securitate, troieni, viermi, vulnerabilități ale firewall-ului și o serie de alte probleme care ne țin pe fiecare în fiecare zi. Pentru utilizatorii privați, virusurile și viermii par a fi cele mai grave posibilități. Dar pentru oricine rulează o bază de date, injecția SQL este una dintre cele mai distrugătoare erori de securitate de acolo.
Bazele de date sunt extrem de valoroase în domeniul computerelor. Ele sunt esențiale pentru stocarea datelor ca memorie și pentru afișarea diferitelor relații dintre punctele de date. Aici, la MakeUseOf, avem numeroase baze de date dedicate diferitelor sarcini: una pentru toate articolele noastre, una pentru userbase, una pentru programul nostru de recompense, iar lista continuă. Ce se întâmplă atunci când bazele noastre de date sunt atacate cu rău - sau chiar distruse?
Când nu aveți acces efectiv la o bază de date, injecția SQL este una dintre formele cele mai proeminente de atac. Continuați să citiți pentru a afla ce este exact și cum poate fi atât de periculos.
Ce este SQL, oricum?
Pentru a înțelege SQL injectarea, trebuie să înțelegeți mai întâi ce este SQL și cum se referă la un site Web. SQL, care reprezintă limba Structurat de Interogare, este un tip de limbaj de programare optimizat pentru gestionarea datelor tabulare. Pentru toate intențiile și scopurile, este doar o modalitate pentru programatori de a comunica cu o bază de date și a da comenzi.
Ori de câte ori se acționează o bază de date, există comenzi SQL care sunt date și procesate. Dacă vă gândiți la toate momentele în care se desfășoară o bază de date, veți concluziona că se întâmplă doar într-o serie de circumstanțe:
- Atunci când trebuie introduse date noi,
- Atunci când trebuie schimbate datele curente,
- Când datele vechi trebuie șterse,
- Atunci când o anumită piesă de date trebuie căutată și preluată.
Ori de câte ori trebuie să apară una dintre aceste acțiuni, o comandă SQL este executată undeva pe un server. În cea mai mare parte, programatorul ajunge să determine când și în cazul în care aceste comenzi SQL apar în codul sursă. Cu toate acestea, există circumstanțe inevitabile atunci când un utilizator poate forța o manipulare a unei baze de date - și aceste oportunități sunt în jurul tău.
Te-ai conectat vreodata la un site? Ați postat vreodată un comentariu la un articol din blog sau un răspuns într-un fir de forum? Trimiteți vreodată un mesaj Facebook unui prieten? Ați scris un e-mail în Gmail? Ați căutat un site pe Google? De fiecare dată când vedeți un câmp de introducere pe un site web (nume de utilizator, parolă, interogare de căutare, casetă de mesaj etc.), acel text este trimis în baza de date și a acționat după.
Acum, dacă un utilizator rău intenționat dorea să manipuleze o bază de date, nu există foarte multe opțiuni pentru el. O posibilitate ar fi să câștigi reale fizic accesul la server și distrugerea acestuia la baza sa. În caz contrar, este foarte util ca utilizatorul răuvoitor să deturneze o comandă SQL existentă atunci când utilizează un câmp de intrare, forțând astfel serverul să execute o comandă diferită de cea inițial.
Tehnica de injectare SQL
Acest act de deturnare a unei comenzi SQL existente este la care se referă injecția SQL. De ce se numește injecție? Deoarece deturnarea unei comenzi SQL necesită utilizatorului să-și injecteze propriul cod SQL atunci când utilizează un câmp de intrare. Suna asta confuz? Permiteți-mi să ilustrez cu un exemplu.
Luați în considerare pagina de conectare a lui MakeUseOf. Când introduceți numele de utilizator și parola și apăsați “A depune“, forțați serverul web să genereze o comandă SQL care implică informațiile pe care tocmai le-ați dat - adică numele de utilizator și parola. Baza de date primește informațiile, verifică dacă combinația de nume de utilizator / parolă este corectă, apoi vă oferă accesul adecvat la alte zone ale site-ului.
Acum, imaginați-vă ce s-ar întâmpla dacă un utilizator rău intenționat nu și-a introdus numele de utilizator și parola, ci a tastat o comandă SQL ca nume de utilizator? Dacă codul serverului nu este securizat în mod corespunzător, baza de date va primi numele de utilizator defect (care este într-adevăr o comandă SQL) și va rula efectiv ca o comandă.
Și de aceea se numește injecție. Comanda SQL este injectată în baza de date prin mijloace legitime, manipulând-o astfel încât să sfârșească să facă ceva ce nu trebuia să facă.
Un exemplu avansat
Până acum, am descris SQL injectare în termeni de nivel înalt, astfel încât oricine să înțeleagă - chiar și pe cei fără cunoștințe de programare. În această secțiune, voi da un exemplu real Cum această tehnică este posibilă. Dacă sunteți un începător SQL sau dacă nu v-ați ocupat niciodată de programare, puteți trece cu ușurință în această secțiune.
Atunci când vă conectați la un site web, este posibil ca codul să poată fi scris în SQL:
SELECT user_id
FROM users_db
WHERE username = "$ username" ȘI parola = "$ password"
În principiu, comanda cere ca baza de date să returneze toate user_ids de la masă users_db care corespund combinației de nume de utilizator și parolă introduse. Arată bine și dandy, bine?
Să presupunem că forma de autentificare a primit următoarele intrări:
Nume utilizator: David
Parola: fubar 'OR' x '=' x
Observați că câmpul de parolă nu începe sau nu se termină cu un apostrof. Când serverul primește această încercare de conectare, va lua tot ceea ce este dat în câmpul de parolă și îl va pune în locul parolei $ din cod. Comanda SQL rezultată va arăta astfel:
SELECT user_id
FROM users_db
WHERE username = "David" ȘI parola = 'fubar 'OR' x '=' x'
Când serverul execută această comandă, va fi ultima parte a acelei comenzi SQL mereu retur adevărat. Acest lucru înseamnă că utilizatorul rău intenționat ar putea să introducă un nume de utilizator și să obțină imediat accesul la acel cont, deoarece datele de conectare ar funcționa dacă a primit sau nu dreptul de parolă.
Desigur, conectarea la contul cuiva este o infracțiune destul de ușoară atunci când o comparați cu toate celelalte încercări de hack: ștergerea întregii baze de date, mutarea tuturor datelor sau chiar furat datele din bazele de date.
Dezvoltatorii web profesioniști devin din ce în ce mai buni la prevenirea unor astfel de trucuri, dar din când în când veți auzi că o companie a suferit pierderi în mâinile unui atac de injecție SQL. Când se întâmplă, știți acum ce înseamnă și cum este posibil.
Image Credit: Intro Image prin Shutterstock, schema de baze de date prin Shutterstock, HACKED Prin intermediul Shutterstock