Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SQL Injection/Insertion, Jak zapobiec włamaniu na stronę.
Najki
post 24.11.2004, 23:13:57
Post #41





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
- - J4r0d   Cytat(Peter Riley @ 2005-05-08 17:43:03)oczyw...   8.05.2005, 19:08:08
- - Peter Riley   Cytat(J4r0d @ 2005-05-08 18:08:08)Cytat(Peter...   8.05.2005, 19:47:55
- - sopel   Cytat(Peter Riley @ 2005-05-08 18:43:03)addsl...   8.05.2005, 22:14:33
- - Kinool   panowie!!!! juz ktos pisal o tym ...   9.05.2005, 00:14:50
- - Peter Riley   Cytat(sopel @ 2005-05-08 21:14:33)smiem twier...   9.05.2005, 01:28:44
- - ktuvok   Dorzucę się do tego wątku i powiem, że moim zdanie...   14.05.2005, 20:58:57
|- - J4r0d   Cytat(ktuvok @ 14.05.2005, 19:58 ) Dorzuc...   29.05.2006, 22:28:55
- - Vengeance   Cytat(Peter Riley @ 2005-05-08 19:43:03)Cytat...   14.05.2005, 21:44:37
- - bolas   a takie pytanko jeszcze. czy umozliwienie stoso...   16.05.2005, 23:02:57
- - bolas   wszystkie znaki - oczywiscie przy wlaczanej dyrekt...   18.05.2005, 14:56:35
- - kubatron   Nie wiem czy był dawany ten link lecz jeśli nie to...   22.05.2005, 10:18:04
- - gu35t   mozna sie legalnie sprawdzic: http://peanix.ath.cx...   29.06.2005, 19:08:01
- - logeen   Cytat(Vengeance @ 2005-05-14 20:44:37)Union d...   6.07.2005, 13:03:21
- - Vengeance   Wiadomym jest, że nie w każdym się da... ale są pr...   7.07.2005, 19:53:24
- - johnson   Nie zapominajmy, że przy union włamywacz musi znać...   7.07.2005, 20:04:31
- - Vengeance   IMHO pokaz mi programiste co nie trzyma loginow i ...   7.07.2005, 20:07:40
- - logeen   Cytat(Vengeance @ 2005-07-07 18:53:24)Gdy kto...   7.07.2005, 21:03:48
- - Vengeance   Dlatego, że w takim forum wykonuje się masę zapyta...   7.07.2005, 23:35:32
- - logeen   To jasne, ale zależy, co rozumiesz przez "fil...   8.07.2005, 01:01:33
- - Vengeance   1. A kto mówi że strona musi traktować o czymś gdz...   8.07.2005, 01:16:42
- - logeen   ad.1) Czyli co? Jeżeli zamierzasz zbudować np. for...   8.07.2005, 02:34:26
- - MStaniszczak   Nie ma sensu nic wywalać (filtrować żadnych słów)....   8.07.2005, 09:39:00
- - Imperior   Oświećcie mnie proszę i powiedzcie, gdzie przy zdr...   8.07.2005, 09:45:52
- - Vengeance   Imperior... są nawet tacy co robią [SQL] pobierz,...   8.07.2005, 12:17:30
- - logeen   @Vengeance: Z tą opowieścią, to się z Tobą zgodzę....   8.07.2005, 12:36:26
- - Vengeance   @logeen: Ale powiedzmy sobie prawde, że fora szkol...   8.07.2005, 12:53:05
- - johnson   Mówcie co chcecie, ale czy jest ktoś w stanie poda...   8.07.2005, 12:57:26
- - logeen   @johnson: Odpowiedź brzmi: pełna filtracja (tzn. ...   8.07.2005, 13:32:36
- - brachu   jezeli mozna wtracic swoje 3 grosze.... to testowa...   8.07.2005, 14:22:05
- - MStaniszczak   A tu http://www.gajdaw.pl/varia/xss.html macie coś...   8.07.2005, 14:53:21
- - moron   czyli co? mysql_escape_string, stripslashes moglb...   25.08.2005, 09:58:28
- - logeen   [PHP] pobierz, plaintext <?php/** * Wstawia zna...   25.08.2005, 19:37:06
- - qeuw   Jak można zabazpieczyć stronę jeżeli mam where id=...   28.09.2005, 14:47:54
- - ActivePlayer   CytatJak można zabazpieczyć stronę jeżeli mam wher...   28.09.2005, 15:14:44
- - h.4   Mam takie pytanie... [PHP] pobierz, plaintext ...   28.09.2005, 18:05:34
- - ActivePlayer   Cytata jeśli zamiast _GET będzie _POST z jakimś te...   28.09.2005, 18:54:36
- - wojto   Cytat(h.4 @ 2005-09-28 19:05:34)i teraz jak z...   28.09.2005, 20:45:54
- - qeuw   Otóz zrobilem funckje która zamienia wyrażenia sql...   28.09.2005, 21:08:04
- - logeen   Cytat(qeuw @ 2005-09-28 20:08:04)Otóz zrobile...   29.09.2005, 19:58:27
- - MalyKazio   Prawdę mówiąc ten temat jest strasznie zaśmiecony....   15.01.2006, 12:40:44
- - Vengeance   MalyKazio: Znów ci się "oberwie" odemnie...   15.01.2006, 12:50:59
- - the_foe   [PHP] pobierz, plaintext <?php$win="xA5xC6...   23.02.2006, 02:40:09
- - kofaniutki_misio   Witam, Czytałem posty na temat zabezpieczeń na st...   26.02.2006, 19:46:34
- - vedeney   Sorry that not Polish, but your functions are so ...   28.02.2006, 14:33:07
- - kofaniutki_misio   hej vedeney. funkcja logs, jest przepisana. Global...   28.02.2006, 22:08:23
- - dr_bonzo   [PHP] pobierz, plaintext <?php$age = $_GET...   28.02.2006, 23:28:36
- - vedeney   Ok! I`ve understand you, But your code did...   1.03.2006, 08:53:31
- - the_foe   Cytat(vedeney @ 2006-02-28 14:33:07)[PHP] pob...   2.03.2006, 19:35:09
- - LamaMASTER   Cytatzabezpieczenie w stylu:[PHP] pobierz, plainte...   5.04.2006, 17:53:33
- - Pawel86   A takie rozwiazanie: [PHP] pobierz, plaintext ...   5.04.2006, 22:36:28
- - Janek111   Mam taki problem: Jesli uzyje mysql_real_escape_st...   16.04.2006, 17:47:42
- - em1X   A szukac to nie potrafisz? [SQL] pobierz, plainte...   29.05.2006, 22:36:35
- - J4r0d   Próbując podsumować dyskusję, możnaby powiedzieć, ...   29.05.2006, 22:52:27
- - Termit_   Wówczas zawsze należy robić dodatkowe confirmy - f...   3.06.2006, 19:58:56
|- - J4r0d   Cytat(Termit_ @ 3.06.2006, 18:58 ) Wówcza...   4.06.2006, 17:53:17
- - thornag   Wedlug mnie mozesz jedynie sprawdzic czy Id nie je...   28.07.2006, 16:32:02
- - eai   @J4r0d Bardzo prosto się można zabezpiec...   2.08.2006, 00:19:08
|- - J4r0d   Cytat(eai @ 1.08.2006, 23:19 ) @J4r0d Bar...   2.08.2006, 15:12:09
- - Turgon   Zgadzam się z Eai. Ja stosuje sumy plus sesje oraz...   2.08.2006, 08:37:09
- - eai   @J4r0d Przecież to jest jeszcze prostsze Przykł...   2.08.2006, 22:40:56
|- - J4r0d   Cytat(eai @ 2.08.2006, 21:40 ) @J4r0d Pr...   3.08.2006, 09:01:53
- - planet_x   Co do zabezpieczenia przed SQL Injection znalazłem...   3.08.2006, 15:09:20
- - php programmer   Mam zapytanie, które jest brzydkie [PHP] pobierz,...   21.08.2006, 11:10:02
- - nospor   a jak ktos ci w miejsce id zamiast powiedzmy 2, wp...   21.08.2006, 11:25:10
- - php programmer   OK. Ale jak mam już zapytanie typu SELECT, np [PHP...   21.08.2006, 13:05:04
|- - sopel   Cytat(php programmer @ 21.08.2006, 14:05 ...   21.08.2006, 13:25:04
- - nospor   W przypadku mysql za bardzo tak ci nic nie skasuja...   21.08.2006, 13:08:30
|- - skowron-line   Cytat(nospor @ 21.08.2006, 12:08 ) mysql_...   21.08.2006, 13:45:32
- - nospor   Cytata jesli bedzie cos takiego http://index.php?...   22.08.2006, 08:23:57
- - php programmer   Kurcze zrobiłem coś takiego: [PHP] pobierz, plain...   23.08.2006, 12:39:00
- - nospor   no musisz przed wyswietleniem uzyc stripslashes. j...   23.08.2006, 12:41:56
- - sopel   używaj prepared statements to w wiekszosci przypad...   23.08.2006, 13:20:47
- - Vexator   przyznam szczerze, ze calego topica nie przeczytal...   30.08.2006, 06:36:08
- - nospor   @Vexator z calym szacunkiem, ale przeczytaj jednak...   30.08.2006, 08:13:33
- - free   Naklepsza ochroną jest stosowanie sesji z prawami ...   31.08.2006, 11:33:31
- - nospor   @free ale jak to sie ma do topicu w ktorym uraczyl...   31.08.2006, 12:02:58
- - Blastereq   Hmm, mam pytanie, stosuje mod_rewrite w ten sposób...   7.09.2006, 12:27:57
- - Rzast   Ja bronię się trochę inaczej: robię zapytanie typu...   11.09.2006, 15:36:07
- - MatheW   Super - sprawdzasz tylko po haśle - więc zakladasz...   11.09.2006, 16:49:54
- - Rzast   @MatheW: Właśnie chodziło mi o to, ...   12.09.2006, 07:58:38
- - MatheW   Cytat@MatheW: Właśnie chodziło mi o to, żeby nie d...   26.09.2006, 16:37:19
|- - Rzast   MatheW: Przyjżałeś się? Ale tak naprawdę uważnie? ...   28.09.2006, 10:24:12
- - eai   To jest bez sensu... a jeśli w bazie masz założymu...   29.09.2006, 09:26:34
- - paziek   Witam, Czytam wątek już drugi raz (pierwszy raz o...   29.03.2007, 20:20:36
|- - Jarod   Cytat(paziek @ 29.03.2007, 19:20:36 )...   29.03.2007, 21:18:38
- - paziek   Jarod: Dzięki ale nie dzięki ;o Po pierwsze, cytu...   29.03.2007, 21:52:15
- - akubiczek   Tak, istnieje taki bug. Nazywa się on: $slas...   6.04.2007, 13:14:58
- - L00zak   php5, pdo i podpinanie, a skończą si...   27.04.2007, 23:41:16
- - radex_p   Czy ktoś, kto się na tym zna może mi odpowiedzieć:...   6.05.2007, 17:53:23
- - Jarod   Stosuję mysql_escape_string + filtrowanie danych i...   6.05.2007, 17:57:26
- - radex_p   skoro mysql_escape_string (nie licząc standardowyc...   6.05.2007, 19:15:35
- - sopel   są sytuacje kiedy da się ją obej...   7.05.2007, 00:05:09
- - orglee   Witam. Przeczytałem ten temat dwa razy. Dwa razy d...   12.05.2007, 17:08:15
|- - SirZooro   Cytat(orglee @ 12.05.2007, 17:08:15 )...   14.06.2007, 18:18:29
- - Kicok   CytatProsiłbym o jakieś komentarze czy jest ona be...   12.05.2007, 17:24:00
- - orglee   Czyli nie ma się co zastanawiać tylko walnąć str_r...   12.05.2007, 17:36:48
- - bełdzio   tylko po co te regexpy?   15.06.2007, 16:54:59
|- - orglee   Cytat(bełdzio @ 15.06.2007, 17:54:59 ...   15.06.2007, 18:33:41
- - Nightmare   Po to żeby ci z php4 też mieli bezpieczne formular...   16.06.2007, 11:45:53
5 Stron V  < 1 2 3 > » 


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

 



RSS Wersja Lo-Fi Aktualny czas: 19.05.2024 - 08:27