[PHP/MySQL]Sql injection

[PHP/MySQL]Sql injection
SN
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 16 lat
  • Postów:109
0

Witam,
piszę skrypty oparte na bazie danych MySQL ale nie za bardzo wiem w jaki sposób ludzie mogą wykorzystać SQL Injection... Zazwyczaj filtruje wchodzące dane funkcją mysql_real_escape_string. Ale mam takie pytanie... Jeżeli mam zapytanie:

SELECT * FROM users WHERE login='$login'

Gdzie jako $login użytkownik mógłby podać dowolną wartość, to jak dzięki temu ktoś mógłby wykonać dowolne zapytanie? Np. UPDATE users SET pass='abc'? Jedyna rzecz, jak można to wykorzystać która mi przychodzi do głowy, to podanie jako $login wartości: login' or 1=1 #

Nie mówcie, że pytam się o to bo chce się gdzieś włamać... Muszę wiedzieć jak to działa jeżeli chce skutecznie zabezpieczyć moje strony.

Z góry dziękuję


pozdrawiam
Snowak
yacooh
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 16 lat
0

Sposobow jest mnostwo w zaleznosci od wprowadzanych danych wejsciowych. Jezeli masz wprowadzany login to przykladowo mozesz filtrowac to przez wyrazenie regularne, ktore dopusci tylko male i duze litery oraz cyfry.
Tu i tu jest troszke przykladow.

tomkiewicz
  • Rejestracja:około 23 lata
  • Ostatnio:prawie 3 lata
  • Postów:1193
0

można rozdzielić zapytania średnikiem i dodać # do wykomentowania reszty kodu - przy dużym szczęściu serwer może być źle skonfigurowany i przepuścić 2 zapytania w jednym mysql_query

poza tym czyżbyś przechowywał hasła w bazie w postaci niezaszyfrowanej? :>


yacooh
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 16 lat
0
tomkiewicz napisał(a)

przy dużym szczęściu serwer może być źle skonfigurowany i przepuścić 2 zapytania w jednym mysql_query

Postgre tak, ale mysql nie slyszalem.

SN
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 16 lat
  • Postów:109
0

Sprawdzałem z dwoma zapytaniami - nie działa. Jak jeszcze można wykonać w tym przypadku inne zapytanie?


pozdrawiam
Snowak
yacooh
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 16 lat
0

Widze, ze nie masz zamiaru zajrzec pod linki, ktore Ci podeslalem. Najwazniejsze jest myslenie, jezeli spodziewasz sie, ze w zmiennej $_POST czy $_GET jest liczba calkowita, to rzutuj ja na typ calkowity badz uzywaj funkcji intval(), jezeli jakas zmienna ma miec okreslona dlugosc to sprawdzaj to, uzywaj wyrazen regularnych, filtruj addslashes badz mysql_real_escape_string() itp, itd...

SN
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 16 lat
  • Postów:109
0

Ty chyba nie zrozumiałeś pytania. Ja mniejwięcej wiem jak się przed tym zabezpieczyć, tylko jestem ciekaw jak taki przykład można wykorzystać -,-

@down:
Można wygoglować, ale nie konieczne do tego przykładu -,-


pozdrawiam
Snowak
yacooh
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 16 lat
0
Snowak napisał(a)

Nie mówcie, że pytam się o to bo chce się gdzieś włamać... Muszę wiedzieć jak to działa jeżeli chce skutecznie zabezpieczyć moje strony.

Wiec dalem Ci juz gotowa recepte.

Poza tym PRZYPOMNE, ze przyklady mozna sobie wygooglac

Adam.Pilorz
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 14 lat
  • Postów:2998
0

@Snowak: Akurat ten przykład, który podałeś jest na tyle klasyczny, że z pewnością na co drugiej stronie poświęconej zabezpieczeniu przed SQL Injection będzie podany.

P.S. Co do dwóch zapytań w jednym mysql_query - wystarczy update MySQL i to przejdzie (MySQL 5 akceptuje wiele zapytań za jednym razem).


Grunt to uziemienie...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.