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 #1





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
 
Start new topic
Odpowiedzi
Kinool
post 25.11.2004, 08:48:38
Post #2





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

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


zabezpieczenie w stylu:
  1. <?php
  2. $query = 'update `uzytkownicy` set `pole`=\"'.$dane.'\" where `id`=\"'.$id.'\";';
  3. ?>
to jak juz powiedziano zadne zabezpieczenie a pozatym zmnijsza wydajnosc zapytania, umieszczanie wartosci liczbowych w momiedzy " " powiduje iz MySQL mysli ze ma do czynienia ze znakami (stringami) i niepotzrebnie musi konwertowac typy.

Przylacze sie do tego co juz powiedziano, uzywac Zmiennych globalnych, i filtrowac wszystko, to co ma byc liczba to konwertowac na liczbe np:
  1. <?php
  2. $_GET['id'] = intval($_GET['id']);
  3. ?>
a to co ma byc stringiem dodawac slashe (addslashes).

Podstawowa zasada to nie ufac nikomu i spodziewac sie najgorszego!
budowac aplikacje tak by wytrzymaly wybuch nuklearny smile.gif

w jednym ze swoich projektw zrobilem petle na foreach ktora z kazdego elemenu tablicy ($_GET, $_POST, $_COOKIE) zamieniala ewentualn wystapienia wyrazen takich jak "SELECT, UPDATE, INSERT, DELETE, WHERE AND" dodajac do nich np twarda spacje &nbsp; lub jakis inny znak co powodowalo ze ew. zapytanie bylo by z gory obarczone bledem.

coprawda rozwiazanie takie nie jest eleganckie bo wszystkie wystapienia tych wyrazeni byly zamieniane nawet jesli ktos nie mial zlych intencji ale sa one bardzo zadko uzywane w naszym slownictwie a dodanie np. twardej spacji praktycznie niczego nie zmienia w wygladzie takiego komentarza, posta etc.


--------------------
Go to the top of the page
+Quote Post

Posty w temacie
- Najki   SQL Injection/Insertion   24.11.2004, 23:13:57
- - Vengeance   Cytat(Najki @ 2004-11-25 00:13:57)Oto co może...   24.11.2004, 23:34:40
- - ActivePlayer   Z tego co wiem to mysql nie wykonuje zapytan typu ...   25.11.2004, 00:06:02
- - Najki   Cytat(Vengeance @ 2004-11-25 00:34:40)punkt 1...   25.11.2004, 00:22:22
- - Kinool   zabezpieczenie w stylu:[PHP] pobierz, plaintext ...   25.11.2004, 08:48:38
- - johnson   Cytat(Kinool @ 2004-11-25 07:48:38)to co ma b...   6.12.2004, 09:23:12
- - Najki   Owszem dodaje, ale chyba tylko, gdy na serwerze je...   6.12.2004, 09:29:56
- - Seth   Dodam jeszcze te dwa linki: http://www.nextgenss.c...   6.12.2004, 12:32:14
- - morrison   Temat ciekawy, ale w zasadzie nie wiem jeszcze co ...   26.02.2005, 17:20:37
- - ActivePlayer   przyklad: [PHP] pobierz, plaintext <?php $...   26.02.2005, 21:45:06
- - sopel   Cytat(ActivePlayer @ 2005-02-26 21:45:06)ale ...   26.02.2005, 23:41:07
- - Vengeance   przez mysql_query() nie. ale funckje postgreSQL ju...   27.02.2005, 14:44:07
- - Riklaunim   dość często jest WHERE coś = liczba gdzie coś jest...   27.02.2005, 14:49:14
- - MoD   Ja do liczb stosuje najczęściej ereg" title="Zobac...   27.02.2005, 17:45:48
- - MStaniszczak   CytatJa do liczb stosuje najczęściej ereg (zwłaszc...   28.02.2005, 03:21:48
- - Vengeance   @MStaniszczak: podobnież "is_numeric(), is_in...   1.03.2005, 17:20:41
- - MStaniszczak   @Vengeance: Więc działa to tak: is_numeric() - sp...   1.03.2005, 23:15:12
- - Vengeance   @MStaniszczak: ja tam nie wiem Mówie tylko co czy...   2.03.2005, 22:22:51
- - MStaniszczak   @Vengeance: Ano analizowałem Zend Engina dość dokł...   2.03.2005, 22:43:20
- - krzemian   W PHPBB też jest coś takiego używane, ale - znowu ...   3.03.2005, 17:09:35
- - Seth   To o czym piszesz sprawdza sie przy liczbach, nato...   3.03.2005, 18:08:48
- - MStaniszczak   @krzemian: CytatOstatnio zrobiłem coś takiego na ...   3.03.2005, 20:40:59
- - ActivePlayer   Moze ktos napisze klase, lub zbiór funkcji, alby u...   3.03.2005, 21:23:10
- - MStaniszczak   Ja używam czegoś takiego (ma już swoje latka - dod...   3.03.2005, 23:18:12
- - docent   no to i moje 3 grosze. primo: nie ma to jak szczyt...   4.03.2005, 00:18:29
- - Vengeance   @docent: szczerze to zadna nowosc ---- Przez chw...   4.03.2005, 19:04:20
- - MStaniszczak   CytatPrzez chwilke pomyslalem, ze mozna by zmienne...   4.03.2005, 19:08:24
- - docent   Cytat(Vengeance @ 2005-03-04 20:04:20)@docent...   4.03.2005, 23:48:57
- - tara   w sumei można też tak, np. dla newsów: [PHP] pobie...   2.04.2005, 17:32:31
- - limak   CytatTo blokuje wysiwetlanie newsa np. 9999 jak i ...   11.04.2005, 21:05:08
- - tara   heh no ale jak ktoś wprawdzi DROP TABLE itp. to te...   11.04.2005, 21:06:48
- - MoD   Cytat(MStaniszczak @ 2005-02-28 04:21:48)Hmmm...   11.04.2005, 21:33:24
- - tarlandil   IMHO dosc wygodna i bezpieczne rozwiazanie: [PHP] ...   29.04.2005, 07:47:36
- - J4r0d   Cytat(Vengeance @ 2005-02-27 13:44:07)przez m...   8.05.2005, 17:11:33
- - sopel   Cytat(J4r0d @ 2005-05-08 17:11:33)Cytat(Venge...   8.05.2005, 17:35:35
- - johnson   Cytat(J4r0d @ 2005-05-08 16:40:02)Więc, które...   8.05.2005, 17:46:29
- - sopel   addslashes() (jeden raz!!!) powinno w ...   8.05.2005, 17:48:08
- - Peter Riley   Smieszne sa te wasze rozwazania, nie szkoda czasu?...   8.05.2005, 17:49:40
- - J4r0d   CytatNie rozumiem o co Wam chodzi z tym addslashes...   8.05.2005, 17:56:50
- - Peter Riley   Cytat(J4r0d @ 2005-05-08 16:56:50)Bezpieczeńs...   8.05.2005, 18:43:03
- - 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
5 Stron V   1 2 3 > » 


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

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 22:27