Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





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
- - Soulast   a ja się już nie co zagubiłem w tym wszystkim lecz...   24.05.2010, 23:52:25
- - Agape   Powiedzcie mi, jak powinienem filtrować całą tabli...   22.06.2010, 09:42:42
|- - Agape   Cytat(Agape @ 22.06.2010, 10:42:42 ) ...   22.06.2010, 13:12:02
- - erix   O mamo, a przeczytałeś chociaż pierwszą stronę teg...   22.06.2010, 11:35:26
- - erix   array_map   22.06.2010, 13:50:38
- - dsfds2432432dsf   Zasada jest prosta - Don't trust user input A...   6.07.2010, 21:38:07
- - Hoku   tak się zastanawiam czy przepuszczenie przez preg_...   6.07.2010, 22:58:52
|- - bełdzio   Cytat(Hoku @ 6.07.2010, 23:58:52 ) ta...   6.07.2010, 23:21:26
- - Crozin   A po co Ci to wyrażenie?   6.07.2010, 23:15:15
- - Hoku   Wyrażenie samo w sobie ma oczyszczać np. dodawaną ...   7.07.2010, 09:26:26
- - bełdzio   wszystko zależy od tego, gdzie następnie wyświetla...   7.07.2010, 12:17:22
- - SHiP   Ja wspomne, że mysql_real_escape_string oraz addsl...   7.07.2010, 13:20:48
|- - Spawnm   Cytat(SHiP @ 7.07.2010, 14:20:48 ) Ja...   16.07.2010, 14:56:18
- - H4eX   A co powiecie na takie zabezpieczenie przed SQL In...   16.07.2010, 14:20:56
- - Spawnm   A co jak ja cię poproszę/zlecę napisanie mi bloga ...   16.07.2010, 14:23:44
- - pyro   Poza tym to zabezpieczenie totalnie nic nie daje, ...   16.07.2010, 14:25:54
- - H4eX   Czy oprócz kodowania szesnastkowego, da się jeszcz...   16.07.2010, 14:34:33
- - erix   Weźcie mi wyjaśnijcie jedno - jest już kilka skute...   16.07.2010, 18:35:31
- - Spawnm   Erix - bo w sieci na stronach o sql injection zami...   16.07.2010, 18:39:20
- - SHiP   @Spawnm: musiałbym to iconv przetestować ale moim ...   16.07.2010, 22:29:04
|- - pyro   Cytat(SHiP @ 16.07.2010, 23:29:04 ) W...   16.07.2010, 22:48:54
|- - H4eX   Cytat(SHiP @ 16.07.2010, 23:29:04 ) W...   17.07.2010, 13:29:19
- - erix   Huh, z tego co pamiętam, to dało się też niektóre ...   16.07.2010, 22:38:07
- - SHiP   @pyro: ok trochę się zapędziłem. Sprawdziłem i w n...   16.07.2010, 23:11:18
|- - darko   Cytat(SHiP @ 17.07.2010, 00:11:18 ) E...   17.07.2010, 13:48:00
- - SHiP   [SQL] pobierz, plaintext SELECT char(80,72,80...   17.07.2010, 13:46:16
- - SHiP   @darko: jaką masz wersję mysql? I czy masz w wybra...   17.07.2010, 13:50:17
- - darko   5.0.51a-24+lenny2+spu1 (Linux debian 2.6.30-bpo.1-...   17.07.2010, 13:51:37
- - SHiP   Hmm no to dziwne. Wygląda na to, że starsza werjsa...   17.07.2010, 13:55:09
- - darko   Wydzielcie ten nasz OT, jak możecie /*!SELECT*...   17.07.2010, 14:06:47
- - set4812   Temat ma duzo strony czy ktoś mógłby wymienic wszy...   28.09.2010, 19:19:11
- - Noidea   W sumie to faktycznie lekki śmietnik tu się zrobił...   29.09.2010, 11:38:25
|- - lukasamd   Cytat(Noidea @ 29.09.2010, 12:38:25 )...   29.09.2010, 11:55:48
- - gargamel   A co sądzicie o metodzie (na SELECT, UPDATE itp) ...   28.11.2010, 14:13:04
- - Mephistofeles   Po co? Może wystąpić kolizja, choć to mało prawdop...   28.11.2010, 14:16:03
- - michal123   Czy zastosowanie wyrazen regularnych z funkcja pre...   4.12.2010, 19:18:04
|- - pyro   Cytat(michal123 @ 4.12.2010, 19:18:04...   4.12.2010, 19:42:04
- - Rid   Ja na każdym inpucie wprowadziłem preg_match jako...   18.12.2010, 18:51:37
- - propage   A moje pytanie jest takie: Czy jest gdzieś zesta...   30.01.2011, 14:14:45
- - Crozin   @propage: A teraz wyobraź sobie, że tutaj na forum...   30.01.2011, 14:26:14
- - propage   to wyjątkowa sytuacja, nie mam zamiaru robić forum...   30.01.2011, 14:54:43
|- - pyro   Cytat(propage @ 30.01.2011, 14:54:43 ...   30.01.2011, 21:45:29
- - Crozin   Cytatto wyjątkowa sytuacja, nie mam zamiaru robić ...   30.01.2011, 21:56:07
- - propage   Cytat(Crozin @ 30.01.2011, 21:56:07 )...   31.01.2011, 08:43:00
- - pyro   W tym przypadku wystarczy (zakładając, że wszystki...   31.01.2011, 19:40:07
- - propage   pyro, przed czym ma zabezpieczyć ten kod? jesli...   1.02.2011, 12:21:29
- - nospor   @propage aleś ty cwany... wyciąłeś kawałek z kodu ...   1.02.2011, 12:26:23
- - propage   nie zauważyłem tej funkcji, to jest wystarczające ...   1.02.2011, 12:49:00
- - nospor   Cytatnie zauważyłem tej funkcji,Kod miał 4 linijki...   1.02.2011, 12:53:35
- - japolak   chciałbym sie dowiedzieć jakie jest/są w "mia...   28.07.2011, 19:29:43
|- - kilas88   Cytat(japolak @ 28.07.2011, 20:29:43 ...   28.07.2011, 19:41:14
|- - pyro   Cytat(japolak @ 28.07.2011, 20:29:43 ...   8.08.2011, 14:10:14
- - gargamel   Nie znalazłem w temacie, więc pozwolę sobie dodać ...   10.08.2011, 16:08:26
- - Inscure   Byłby ktoś tak miły, żeby streścić cały ten temat ...   11.08.2011, 17:18:05
- - Noidea   @Inscure W celu zabezpieczenia się przed atakami S...   12.08.2011, 09:05:51
- - skowron-line   A pro po tematu znalazłem dziś na dzone.com http:...   12.08.2011, 11:29:37
- - thek   @Noidea: nie spłycaj tak, bo nie masz do końca rac...   12.08.2011, 13:06:45
- - Noidea   PDO jest dostępne w PHP gdzieś od wersji 5.1. MySQ...   12.08.2011, 14:51:22
- - thek   Noidea... A ja napiszę, że zamiast prepared statem...   12.08.2011, 20:15:26
- - Noidea   Sparametryzowane wywołanie procedur składowanych z...   13.08.2011, 08:25:34
- - kuba32   Witam, chciałbym się dowiedzieć czy mając włączone...   23.08.2011, 17:57:25
- - drozdii07   magic_quotes to najgorsze co może być.. Wyłącz to ...   23.08.2011, 20:12:15
- - kuba32   No właśnie niby mówi się, że magic_quotes jest ble...   24.08.2011, 13:59:58
- - erix   Cytatkiedy swoją aplikacje będziemy musieli przeni...   24.08.2011, 14:14:13
- - henio   Chciałbym dowiedzieć się czy używanie PDO i metod ...   27.09.2011, 13:24:13
- - fr33d0m   Przeczytałem cały temat i zastanawia mnie dlaczego...   13.10.2011, 11:47:42
- - SHiP   O ile w normalnych warunkach wszystko jest ok to j...   13.10.2011, 12:11:06
|- - pyro   Cytat(SHiP @ 13.10.2011, 12:11:06 ) S...   4.11.2011, 17:46:58
- - fr33d0m   Nie zagłębiam się aż tak w inne kodowanie niż euro...   13.10.2011, 12:22:47
- - SHiP   Chodziło mi o przedstawienie przykładu, który poka...   13.10.2011, 12:28:18
- - cudny   Cytat(pyro @ 4.11.2011, 17:46:58 ) A ...   5.11.2011, 12:00:35
|- - pyro   Cytat(cudny @ 5.11.2011, 12:00:35 ) A...   5.11.2011, 20:48:46
- - ficiek   Jest prosty sposób na szybkie wyczyszczenie danych...   6.11.2011, 12:53:56
- - cudny   Cytat(pyro @ 5.11.2011, 20:48:46 ) No...   7.11.2011, 23:45:47
|- - pyro   Cytat(cudny @ 7.11.2011, 23:45:47 ) N...   8.11.2011, 22:12:41
- - fernet   Temt SQL Injection/Insertion nigdy mnie nie dotycz...   12.11.2011, 21:47:38
- - sebekzosw   takie pytanie - dane filtrować mysql_real_escape_s...   20.03.2012, 11:47:54
- - nospor   Przeczytaj do czego służy mysql_real_escape_strin...   20.03.2012, 11:56:12
- - szymon1215   Użycie PDO w następujący sposób [PHP] pobierz, pla...   12.07.2012, 13:19:38
- - Mephistofeles   Tak.   14.07.2012, 10:59:11
- - Dominator   Jeśli będę używał PDO zamiast MySQL do łączenia si...   14.07.2012, 22:38:30
- - Mephistofeles   Po pierwsze nie zamiast MySQL, co najwyżej mysql_ ...   14.07.2012, 22:45:36
- - Dominator   A gdzie mogę zobaczyć przykład zapytań preparowany...   15.07.2012, 11:29:35
- - Mephistofeles   Stronę wcześniej w tym temacie .   15.07.2012, 11:49:08
- - Dominator   Czyli ten kod jest preparowaniem zmiennych, tak ? ...   15.07.2012, 13:37:13
- - d3ut3r   tak.   15.07.2012, 13:51:12
- - Dominator   Dobra, po przeczytaniu lektury w tym temacie od dn...   24.07.2012, 22:48:55
- - Cadmer   Witam Chciałbym potwierdzić kilka rzeczy: 1. Czy f...   21.01.2013, 22:12:19
|- - pyro   Cytat(Cadmer @ 21.01.2013, 22:12:19 )...   21.01.2013, 22:17:21
- - Cadmer   Dzięki z szybką i konkretną odpowiedz. Co do 1. to...   21.01.2013, 23:19:03
|- - pyro   Cytat(Cadmer @ 21.01.2013, 23:19:03 )...   21.01.2013, 23:38:04
- - Cadmer   Na dobrą sprawę moim problemem nie jest niewiedza ...   22.01.2013, 17:49:30
|- - pyro   Cytat(Cadmer @ 22.01.2013, 17:49:30 )...   22.01.2013, 18:08:50
|- - Piotrbaz   Cytat(pyro @ 22.01.2013, 18:08:50 ) 1...   3.02.2013, 18:05:56
- - Cadmer   Cóż można tam wstawić ID jakiegokolwiek użytkownik...   22.01.2013, 22:22:41
- - pyro   Cytat(Cadmer @ 22.01.2013, 22:22:41 )...   3.02.2013, 21:40:08
- - Piotrbaz   No ok, czyli htmlspecialchars() stosuje przed wyśw...   3.02.2013, 23:11:32
- - pyro   Tak, prepared statements w PDO powinny załatwić sp...   3.02.2013, 23:17:57
- - Wasper   Czesc, troche tego duzo, szczerze, nie mam czasu ...   4.03.2013, 12:04:37
- - !*!   Zostaw te bzdury zaczynające się od mysql_* w manu...   4.03.2013, 12:25:07
5 Stron V  « < 2 3 4 5 >


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: 7.10.2025 - 03:17