login about faq

Indraznesc sa vin cu inca o intrebare. Am tot citit despre SQL injection si atacuri ale hackerilor. Am gasit cateva tutoriale despre SQL injection dar nimic in limba romana si mai ales nimic pe intelesul unui incepator. Am folosit putin PHP cat sa creez niste siteuri mici, dar sunt incepator. Ce am citit prin tutoriale mi se pare greu de inteles.

Ar putea sa-mi explice cineva pe scurt despre ce e vorba in SQL injection? Eventual sa-mi dea ceva exemple concrete sau un tutorial scris in limba romana, pe intelesul incepatorilor?

Nu ma intereseaza sa sparg siteuri. Vreau doar sa inteleg cum functioneaza si, daca nu e prea greu, sa stiu cum ma pot feri de astfel de atacuri.

Si inca ceva. SQL Injection are legatura cu bazele de date folosite? Adica functioneaza doar pe MySQL? Sau ma afecteaza si daca folosesc alte baze de date cum ar fi Oracle sau SQLite?

asked May 16 '11 at 15:23

Silviu_D's gravatar image

Silviu_D
768814


Salutare Silviu!

Nu incerca sa-ti bati capul cu asa ceva daca esti la inceput. Ce trebuie sa stii e ca trebuie sa validezi orice variabila folosesti in query-uri. Asigura-te ca numerele sunt numere, datele sunt date, string-urile sunt string-uri si sunt sanitizate (cel mai simplu cu mysql_real_escape_string()).

Fiind SQL injection, este vorba de orice sistem de baze de date bazat pe SQL (SQL fiind limbajul nu platforma). Un exemplu simplu e un formular de login la care, in modul cel mai de baza, folosesti un query de genul:

SELECT * FROM 'users' WHERE 'username' = '$username' AND 'password' = '$password'

In cazul asta, $username si $password sunt variabile PHP citite direct din campurile <input> fara niciun fel de validare. Sa presupunem si ca $username este "' OR 1=1;" (fara ghilimele). Astfel query-ul tau devine

SELECT * FROM 'users' WHERE 'username' = '' OR 1=1;

care valideaza practic orice date de login, deoarece apostroful din $username schimba query-ul in ceva ce nu se dorea initial, iar 1=1 se valideaza intotdeauna.

Evident, metodele SQL Injection merg mult mai departe si probabil ca nici exemplul pe care ti l-am dat nu este cel mai bun, insa exemplifica la nivel de baza ce vrei sa afli. Atata timp cat iti validezi variabilele ar trebui sa fi safe, mai ales variabilele care sunt direct introduse sau pot fi introduse de utilizator prin orice forma.

Daca ai o vulnerabilitate de genul asta pe un site/aplicatie web, sunt sanse mari ca cel care o descopera sa poata extrage date din baza de date sau modifica/sterge date dupa cum vrea, cu putina rabdare. Fii atent si atunci cand transmiti variabile prin URL (pe care le citesti apoi cu $_GET) dar si la variabile trimise catre pagini (scripturi de login de exemplu) pe care le citesti cu $_POST, desi un user de rand nu va vedea variabilele, cineva care a mai lucrat in domeniu sau se ocupa cu asa ceva poate sa creeze un script care sa trimita ce variabile vrea la scripturile respective.

Cum ziceam, valideaza orice fel de variabile si foarte important, nu te baza pe tehnologii server side gen magic quotes.

Daca mai ai alte nelamuriri, go ahead :)

answered May 16 '11 at 21:58

Claudiu's gravatar image

Claudiu
35171322

Foarte buna explicatia! As mai adauga un mic detaliu. O validare/sanitizare foarte buna se poate face folosind expresiile regulate. In PHP le poti folosi cu functiile preg_match() si preg_replace().

(May 18 '11 at 15:49) Sergiu Tot ♦♦ Sergiu%20Tot's gravatar image
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Sharing is caring:

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Reclamă

Ne urmăresc

Tags:

×20
×6
×2
×2

Asked: May 16 '11 at 15:23

Seen: 1,099 times

Last updated: May 18 '11 at 15:49

powered by OSQA © 2011 NetHelp.ro, toate drepturile asupra continutului rezervate.