Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





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
- - 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
|- - bełdzio   Cytat(SirZooro @ 14.06.2007, 19:18:29...   16.06.2007, 16:21:03
- - 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
- - Sedziwoj   z ctype_digit() trzeba ostrożnie, bo jeśli nie dos...   16.06.2007, 16:29:43
- - Black-Berry   Postanowiłem przyłączyć si...   26.06.2007, 09:51:43
|- - Sedziwoj   Nie, zawsze będzie 0, ponieważ tu jest błąd: [PHP]...   26.06.2007, 14:26:32
- - Black-Berry   Tyle się rozpisaliście na tym wątku...   3.07.2007, 09:37:48
- - bełdzio   [SQL] pobierz, plaintext SELECT * FROM tabelka WHE...   3.07.2007, 12:59:08
- - Black-Berry   że też ja na to nie wpadłem.... Sory, że dalej ...   4.07.2007, 09:29:08
- - bełdzio   w mysql_valid_string return by się przydał   4.07.2007, 10:59:09
- - LEW21   Black-Berry, po co tak kombinować? Po prostu do in...   24.07.2007, 14:30:47
|- - Sedziwoj   Cytat(LEW21 @ 24.07.2007, 15:30:47 ) ...   25.07.2007, 08:09:25
- - NoiseMc   Cytat$strIn = '-2'; Jezeli ktos poda ...   7.08.2007, 05:27:11
- - Sedziwoj   @NoiseMc Wiesz ale nie musi być to ID rekordu i n...   7.08.2007, 18:53:15
- - NoiseMc   Ale po co kombinowac ... [PHP] pobierz, plaintext ...   9.08.2007, 16:24:55
- - Sedziwoj   Ech, ciągle ograniczasz się do ID, do te...   9.08.2007, 18:16:26
- - NoiseMc   Ja pisze o sposobach zabezpieczenia sie przed wstr...   9.08.2007, 19:10:19
- - Endzio   Witam. Używam kodu [PHP] pobierz, plaintext <?p...   11.09.2007, 06:07:16
- - Black-Berry   Dołączam się do pytania... mo...   11.09.2007, 11:36:35
- - Sedziwoj   Jak sprawdzać dane typu string? To zale...   11.09.2007, 13:16:12
- - piter2k1   Co do pierwszego postu: Kod<?php $query ...   14.09.2007, 12:42:35
- - Kicok   CytatJa zrobił bym po prostu: A co zwraca funkcja...   14.09.2007, 13:02:23
- - templar   Cytat(Najki @ 25.11.2004, 00:13:57 ) ...   30.09.2007, 21:42:27
- - bełdzio   @templar a po co te regExpy? nie lepiej skorzystać...   30.09.2007, 22:34:53
|- - rzymek01   Cytat(bełdzio @ 30.09.2007, 22:34:53 ...   14.11.2007, 20:55:27
- - Regyam   a co z sql injection jezeli mam linki w mod_rewrit...   4.11.2007, 14:46:49
- - bełdzio   zawsze istnieje możliwość odwołania się bezpośredn...   4.11.2007, 15:40:32
- - bełdzio   wg. manuala ctype jest szybsze, a raczej ich testy...   15.11.2007, 00:25:56
- - Garrappachc   Co do samego początku tematu: czy nie można przef...   15.11.2007, 22:23:22
- - Kicok   CytatA tak poza tym to przecież MySQL odpowiednio ...   15.11.2007, 23:08:17
- - marcio   A wiec po Przeczytaniu chyba juz 10 raz tego temat...   23.12.2007, 23:40:39
- - Kicok   is_integer" title="Zobacz w manualu PHP" target="_...   2.01.2008, 11:10:54
- - pytajnik2   Witajcie, a co myślicie o tym? http://axelpl.wordp...   2.01.2008, 18:06:56
- - bełdzio   patrzac na szybko to nic ciekawego z tego co widz...   2.01.2008, 20:29:42
- - pytajnik2   no ale jak się ma w wszystkie pisywane przecież zm...   2.01.2008, 20:35:44
- - bełdzio   wszystko zalezy od konkretnego kodu, najlepsze zab...   3.01.2008, 00:03:29
- - specialplan   Cytat(kilas88 @ 9.02.2008, 04:27:22 )...   10.03.2008, 12:27:05
- - lucca   Witka! Mam pytanie odnośnie SQL Injection. ...   10.03.2008, 18:51:04
- - kilas88   Cytat(specialplan @ 10.03.2008, 12:27...   10.03.2008, 22:35:51
- - radex_p   Mam takie pytanie: "Od zawsze" bronię si...   11.03.2008, 19:02:00
- - bim2   Czego jeszcze Ci brakuje Wystarczy ze w zmiennych...   11.03.2008, 19:09:01
|- - empuszek   Cytat(bim2 @ 11.03.2008, 19:09:01 ) C...   25.03.2008, 11:49:16
- - radex_p   Jakich znowuż scripts embed?   11.03.2008, 19:11:05
- - bełdzio   zapewne chodzi o xss   25.03.2008, 12:58:54
- - Xniver   CytatPS Co to jest Sript Embed? Chodzi o tagi HTML...   29.03.2008, 20:49:17
- - gandziorz   Witam, Przeczytałem temat przyklejony. I nikt nie ...   6.04.2008, 22:10:06
- - Sedziwoj   Myślałem że w przyklejonych ma być jakiś porządek,...   6.04.2008, 22:31:32
- - marcio   Dajesz np na zmienne z get'a prosty str_replac...   6.04.2008, 22:34:11
|- - pyro   Cytat(marcio @ 6.04.2008, 23:34:11 ) ...   23.09.2008, 08:27:57
- - Sedziwoj   @marcio Do id jako liczby całkowitej dodatniej ró...   6.04.2008, 22:56:04
- - MalyKazio   Mam krótkie pytanie. Czy w przypadku używania MySQ...   20.04.2008, 15:24:35
- - Crozin   Jeśli masz magic_quotes przepuść wszystkie dane (_...   20.04.2008, 16:05:44
- - radex_p   Apostrofy na wyrażenie + mysql_real_escape_string ...   9.05.2008, 18:15:23
|- - Jarod   Cytat(radex_p @ 9.05.2008, 17:15:23 )...   10.05.2008, 19:22:55
||- - kilas88   Odnośnie bezpieczeństwa mam takie pytanie.. Gdzieś...   30.05.2008, 11:02:53
|- - ucho   Cytat(radex_p @ 9.05.2008, 18:15:23 )...   5.12.2008, 15:08:28
- - radex_p   to zależy od SQL a nie od typu bazy danych. Przyna...   10.05.2008, 19:30:07
- - marcio   @Up oczywiscie znaki takie jak -,*,/ tez mozna usu...   5.11.2008, 15:50:49
|- - pyro   Cytat(marcio @ 5.11.2008, 15:50:49 ) ...   12.11.2008, 13:30:27
- - kayy   Pytanie; jeżeli użyje takiego czego...   5.12.2008, 12:44:21
- - Black-Berry   Takie coś będzie chyba szybsze i lepsze bo nie spr...   5.12.2008, 13:01:33
5 Stron V  < 1 2 3 4 > » 


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: 11.10.2025 - 15:02