Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SQL Injection/Insertion, Jak zapobiec włamaniu na stronę.
Najki
post
Post #201





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Pytania o streszczenie wątku, posty z "genialnymi" skryptami nadającymi się tylko na przedszkole i inne tego typu, będą bez ostrzeżenia usuwane przez moderatorów.
To mówiłem ja, Jarząbek... znaczy nospor dnia 2007-12-10
-------------------------------------------------------------------------------


SQL Injection (zwane też "SQL Insertion") to (rzekomo) najprostszy sposób włamu na stronę. Spowodowany jest on niepełnym sformułowaniem zapytań do MySQL.

Przykład. Dajemy na stronie możliwość edycji profilu. Zapytanie do SQL wygląda następująco:
  1. <?php
  2. $query = &#092;"update uzytkownicy set pole='$dane' where id='$id'\";
  3. ?>

Osoba włamująca się na stronę umieszcza całkiem prosty, odpowiedni ciąg znaków/poleceń w dowolnym polu edycji tego profilu, który wygląda np. tak (dla zmiany hasła użytkownika o dowolnie wybranym, przez atakującego numerze ID):
  1. <?php
  2. ', haslo='nowe_haslo' WHERE id = '1
  3. ?>


W taki oto prosty sposób, osoba atakująca zmieniła hasło użytkownikowi o ID=1 (zazwyczaj administrator). W podobny sposób można również wyciągnąć dowolne dane z tabeli SQL.

W każdym razie. Poszperałem, pomyślałem i zebrałem wszystko do kupy. Zamieszczam to tutaj razem, oraz proszę o rozbudowanie tego topica, gdyż nie znalazłem na tym forum więcej informacji o "SQL Injection".

Oto co możemy dokonać:
1. Możemy sformułować nasze zapytanie do SQL tak:
  1. <?php
  2. $query = 'update `uzytkownicy` set `pole`=\"'.$dane.'\" where `id`=\"'.$id.'\";';
  3. ?>

2. Przy wstawianiu numerów ID do zapytań należy stosować tzw. rzutowanie typów:
  1. <?php
  2. $id = (int)$_GET['id'];
  3. // lub
  4. $id = intval($_GET['id']);
  5. ?>

3. Przy wstawianiu tekstów, należy wyciąć niebezpieczne znaki przy pomocy funkcji:
  1. <?php
  2. $string = mysql_real_escape_string($_POST['string']); // PHP5
  3.  
  4. $string = mysql_escape_string($_POST['string']); /* lub */ $string = addslashes($_POST['string']); // PHP4
  5. ?>


Może nie ma tego dużo, ale jest to już jakaś podstawa do zabezpieczenia strony/skryptu przed prostym i niezwykle niebezpiecznym, SQL Injection. Proszę osoby obeznane w tym temacie, aby dopisały tu własne propozycje metod zabezpieczenia się przed tym atakiem.

Ten post edytował Najki 14.02.2008, 10:04:12
Go to the top of the page
+Quote Post

Posty w temacie
- Najki   SQL Injection/Insertion   24.11.2004, 23:13:57
- - mlattari   hmmm po co to wszystko? Dlaczego nie wystarczy zab...   29.12.2008, 14:34:28
- - bełdzio   1. niektore firewalle wycinaja refa 2. kryska z ga...   29.12.2008, 20:01:48
- - mlattari   Masz racje! ALE JESTEM GŁUPI! Ostatnio pis...   30.12.2008, 01:18:00
- - pyro   jasne, napiszesz odpowiedz na jakiegos posta (prze...   30.12.2008, 01:35:58
- - mlattari   No już pisałem że jestem GŁUPI...   30.12.2008, 02:38:12
|- - pyro   Cytat(mlattari @ 30.12.2008, 02:38:12...   30.12.2008, 10:17:33
- - bełdzio   nawet nie korzystajac z union selecta mozna przepr...   30.12.2008, 09:36:28
- - ucho   To ja bym prosił o jakiś przykład - bo przy mysql,...   30.12.2008, 10:00:41
|- - bełdzio   Cytat(ucho @ 30.12.2008, 10:00:41 ) T...   30.12.2008, 20:29:59
- - pest   Sprawa chociażby z logowaniem, gdzie można zapytan...   30.12.2008, 10:10:03
- - mlattari   No to jak już pisałem, na pierwszym miejscu należa...   30.12.2008, 14:14:22
- - erix   Cytatereg_replace W PHP6 Twój skrypt nie zadziała....   30.12.2008, 21:40:33
- - Ermes   hmmm... a słyszeliśta o czymś takim...   2.01.2009, 21:05:38
- - $olo   Cytat(Ermes @ 2.01.2009, 22:05:38 ) g...   12.02.2009, 11:38:27
- - mlattari   hmmm.... ten wątek ciągnie się już od bardzo dawna...   22.02.2009, 17:49:53
|- - pyro   Cytat(mlattari @ 22.02.2009, 17:49:53...   22.02.2009, 18:02:14
- - mlattari   hmm... czy sądzicie że poniższy fragment kodu jes...   26.02.2009, 20:56:14
|- - Orkan   Cytat(mlattari @ 26.02.2009, 22:56:14...   27.02.2009, 23:32:12
- - pyro   Pierwsze zabezpieczenie dobre, jeśli jednak jest t...   27.02.2009, 21:45:05
- - mlattari   :-) No to jasne, że można :-) ale chodzi mi o zab...   28.02.2009, 02:34:55
- - Orkan   a od kiedy zapytanie w mysql_query() konczy sie sr...   28.02.2009, 10:00:57
- - mlattari   zapytania MySql kończy się średnikiem :-) a w mysq...   28.02.2009, 13:38:41
- - bełdzio   ";" oznacza ze dane zapytanie zostalo za...   28.02.2009, 19:10:18
- - mlattari   no racja... ja jakoś lubię te średn...   1.03.2009, 16:01:03
- - bełdzio   trzeba, kod HTML może być dowolnie zmodyfikowany, ...   1.03.2009, 16:04:22
- - mlattari   hmm dzięki! to dobrze wiedzieć!   1.03.2009, 16:21:54
- - megawebmaster   Te wartości, które masz stałe, np. tak jak w przyp...   14.03.2009, 20:32:01
- - thomson89   Nie wiem jak wam, ale jak przepuściłem p...   21.03.2009, 19:41:42
- - Mephistofeles   A po co tak wydziwiać? Jeśli stringa trzymasz w cu...   21.03.2009, 19:48:05
|- - thomson89   Cytat(Mephistofeles)A po co tak wydziwiać? Je...   21.03.2009, 20:21:49
- - erix   CytatI mam pytanie czy przy if, nie można jakos in...   21.03.2009, 20:13:38
- - erix   To najlepiej siedzieć przy kompie i każde żądanie ...   21.03.2009, 20:27:05
- - bełdzio   @thomson89 kiedys na swoim rozowym blogasku pisale...   21.03.2009, 20:41:56
- - escobar1983   Jakie sa mozliwości włamania na mojej stronie? Nie...   22.03.2009, 18:06:44
- - bełdzio   nie widzac kodu zbyt wiele nie da sie powiedziec ...   22.03.2009, 21:02:07
- - rzymek01   pamietaj, że istnieje zatruwanie sesji, więc nie o...   22.03.2009, 21:25:14
- - thomson89   A czy najlepszym zabezpieczeniem nie byłoby sprawd...   14.04.2009, 17:45:02
- - erix   Tak? To ja wpiszę login: Kod' WHERE 1=1 ...   14.04.2009, 18:07:50
- - Rutilius   Mam pytanie, przepraszam, jeśli w złym wątku, ale ...   30.05.2009, 11:59:28
- - erix   CytatCzy to było niebezpieczne? Jeśli nie filtruje...   30.05.2009, 13:10:33
- - mrSlowFlow   Co sądzicie o tym: http://hacking.pl/5845 Czy coś ...   30.05.2009, 17:06:09
- - erix   A chociaż przeczytałeś ten wątek od początku...?   30.05.2009, 20:46:50
- - Fantome   ostatnich kilka dni przesiedziałem na szukaniu dob...   14.06.2009, 15:08:58
- - erix   Cytatostatnich kilka dni przesiedziałem na szukani...   15.06.2009, 10:02:52
- - Fantome   żeby tylko ten... ze 2 dni temu to czytałem i post...   15.06.2009, 11:01:05
- - erix   A wiesz o tym, że na nic nie ma 100% zabezpieczeni...   15.06.2009, 11:11:28
|- - $olo   Cytat(erix @ 15.06.2009, 11:11:28 ) A...   14.07.2009, 16:05:12
- - Fantome   zdaję sobie z tego sprawę jednak staram się wyeli...   15.06.2009, 11:20:18
- - erix   Jeśli wprowadzisz to, o czym mowa w tym wątku, nie...   15.06.2009, 11:28:11
- - nieraczek   Fantome nie banuj po IP - w ten sposób podczas szu...   20.06.2009, 09:05:08
- - erix   To raczej nie wina forum, a tego, że IP trafi...   20.06.2009, 11:17:48
- - Spawnm   Tak się zastanawiam... jeśli strona ma geta np id...   27.06.2009, 20:22:27
- - #luq   Cytat(Spawnm @ 27.06.2009, 21:22:27 )...   27.06.2009, 21:39:56
- - lukasamd   Mam pewne pytanie, odnośnie wypowiedzi erixa dotyc...   28.06.2009, 13:59:21
- - erix   Np. przy korzystaniu z UTF-8. Wszystko jest przec...   28.06.2009, 21:26:21
- - xajart   Z tego co zauważyłem to ile osób tyle rozwiązań pr...   25.11.2009, 13:07:53
- - ucho   Wszystkie pytania o SQL Injection powinny się końc...   25.11.2009, 13:42:16
|- - bełdzio   Cytat(ucho @ 25.11.2009, 11:42:16 ) W...   30.12.2009, 22:32:03
- - Mephistofeles   Zgadzam się. Jak czytam niektóre z tych wymysłów t...   30.12.2009, 21:58:11
- - aio   1 obraz > 1000 słów [PHP] pobierz, plaintext fu...   4.02.2010, 23:38:51
|- - pyro   [PHP] pobierz, plaintext function _P($sql...   13.02.2010, 12:28:23
|- - wiiir   Cytat(pyro @ 13.02.2010, 12:28:23 ) [...   24.02.2010, 14:37:34
|- - kilas88   Cytat(wiiir @ 24.02.2010, 14:37:34 ) ...   24.02.2010, 14:48:58
|- - pyro   Cytat(wiiir @ 24.02.2010, 14:37:34 ) ...   24.02.2010, 15:29:50
- - nospor   Cytatpodwarunkiem ze tablea users istnieje o polac...   24.02.2010, 14:39:55
- - wiiir   Dodajac replace na UNION + kilka innych , ustaleni...   24.02.2010, 14:57:42
|- - ucho   Cytat(wiiir @ 24.02.2010, 14:57:42 ) ...   25.02.2010, 10:25:02
|- - pyro   Cytat(wiiir @ 24.02.2010, 14:57:42 ) ...   25.02.2010, 20:48:47
- - wiiir   jakis bys napisal ze masz nazwy takich tabl i kolu...   24.02.2010, 15:51:48
|- - pyro   Cytat(wiiir @ 24.02.2010, 15:51:48 ) ...   24.02.2010, 16:15:38
|- - wiiir   Cytat(pyro @ 24.02.2010, 16:15:38 ) t...   24.02.2010, 16:47:36
|- - pyro   Cytat(wiiir @ 24.02.2010, 16:47:36 ) ...   24.02.2010, 23:11:24
|- - wiiir   Cytat(pyro @ 24.02.2010, 23:11:24 ) N...   25.02.2010, 08:34:14
|- - kilas88   Cytat(wiiir @ 25.02.2010, 08:34:14 ) ...   25.02.2010, 08:46:38
- - Crozin   CytatNie jestes w stanie tak napisac kodu zeby nie...   24.02.2010, 17:21:59
- - aio   @pyro szampan się nie należy! zmodyfikowałeś m...   1.03.2010, 23:04:44
|- - pyro   Cytat(aio @ 1.03.2010, 23:04:44 ) @py...   2.03.2010, 00:12:13
|- - aio   Cytat(pyro @ 2.03.2010, 00:12:13 ) Al...   2.03.2010, 11:58:22
|- - pyro   Cytat(aio @ 2.03.2010, 11:58:22 ) Chy...   2.03.2010, 12:44:56
|- - aio   Cytat(pyro @ 2.03.2010, 12:44:56 ) ...   2.03.2010, 14:21:44
|- - pyro   Ehh... no to dwie rzeczy: 1. Wskaż mi choć jedno ...   2.03.2010, 15:40:06
- - Crozin   @aio: Traktowanie liczb jako tekstu (tj.: id = ...   1.03.2010, 23:33:47
- - Crozin   No przecież już dostałeś przykład: [PHP] pobierz, ...   2.03.2010, 15:27:45
|- - aio   Cytat(Crozin @ 2.03.2010, 15:27:45 ) ...   2.03.2010, 16:50:34
|- - pyro   Cytat(aio @ 2.03.2010, 16:50:34 ) Otó...   2.03.2010, 17:54:59
- - Crozin   Tak trudno to pojąć, że w sytuacji gdzie użyłbyś t...   2.03.2010, 18:02:12
|- - aio   Cytat(Crozin @ 2.03.2010, 18:02:12 ) ...   3.03.2010, 16:48:55
|- - pyro   Cytat(aio @ 3.03.2010, 16:48:55 ) Jak...   3.03.2010, 17:43:05
- - erix   ~aio, a przeczytałeś ten wątek od początku?   3.03.2010, 19:26:34
|- - aio   Cytat(erix @ 3.03.2010, 19:26:34 ) ~a...   4.03.2010, 13:38:25
- - thek   Ja właśnie za to, iż PHP jest tak "nieokreślo...   4.03.2010, 00:33:49
- - pyro   Ehhh... ja się po prostu poddaję. Nie ważne ile by...   4.03.2010, 18:26:00
|- - aio   Cytat(pyro @ 4.03.2010, 18:26:00 ) Eh...   5.03.2010, 13:27:00
- - kuzdo   Mam pewien problem... Testuje sobie różne zabezpie...   5.03.2010, 18:03:52
- - bełdzio   UNION SELECT możesz wstrzyknąć tylko w zapytania p...   5.03.2010, 21:07:30
- - kuzdo   Dzięki za odpowiedź... Miałem o coś jeszcze się za...   6.03.2010, 00:46:08
- - pyro   UNION, jak sama nazwa mówi (z ang. złączenie) służ...   6.03.2010, 09:00:38
- - GreeN_DG   Witam. Chciałbym wrócić do zagadnienia "prepa...   6.03.2010, 11:43:05
- - erix   Tak.   6.03.2010, 11:50:55
5 Stron V  < 1 2 3 4 5 >


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 18:37