Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





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
- - 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
|- - skowron-line   Cytat(kayy @ 5.12.2008, 12:44:21 ) Py...   5.12.2008, 15:46:53
- - Black-Berry   Takie coś będzie chyba szybsze i lepsze bo nie spr...   5.12.2008, 13:01:33
- - 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
5 Stron V  < 1 2 3 4 > » 


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 Aktualny czas: 10.06.2026 - 23:51