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





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
ToTamir
post 13.12.2013, 16:27:46
Post #402





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 10.04.2012

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


1. Aby się zabezpieczyć na 100% przed usunięciem tabeli najlpeszym rozwiązaniem jest dodanie nowego użytkownika z ograniczonymi uprawnieniami globalnymi.
2. Zaminast dokładać linijek kodu PHP aby przefiltować GET można użyć htaccess, wtajemniczeni wiedzą, że oprócz przyjaznych linków ( np. zamiast ?user=12 można zrobić user-12 ) istnieje możliwość przefiltrowania tekstu np. tylko liczby, tylko duże litery, itp.
Go to the top of the page
+Quote Post
sowiq
post 13.12.2013, 16:34:03
Post #403





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(ToTamir @ 13.12.2013, 16:27:46 ) *
wtajemniczeni wiedzą, że oprócz przyjaznych linków ( np. zamiast ?user=12 można zrobić user-12 ) istnieje możliwość przefiltrowania tekstu np. tylko liczby, tylko duże litery, itp.

O żesz Ty hakerze... To jakaś tajemna wiedza tylko i wyłącznie dla wtajemniczonych, czy podzielisz się nią z innymi?
Go to the top of the page
+Quote Post

Posty w temacie
- Najki   SQL Injection/Insertion   24.11.2004, 23:13:57
- - mstraczkowski   Puszczenie całego zapytania przez mysql_real_escap...   4.03.2013, 13:28:50
|- - Dejmien_85   Cytat(mstraczkowski @ 4.03.2013, 14:28...   2.07.2013, 08:29:22
- - Gligamesh   Cytat(pyro @ 3.02.2013, 22:40:08 ) Ni...   14.03.2013, 01:37:31
- - nospor   Do bazy jak wkładasz to zabezpieczeasz przed sqlin...   14.03.2013, 07:19:00
|- - Gligamesh   Cytat(nospor @ 14.03.2013, 08:19:00 )...   14.03.2013, 11:00:02
- - nospor   1) Proszę nie mieszaj już w tym wątku o XSS. To je...   14.03.2013, 11:22:09
- - Damonsson   Da się jakoś w postgresql wydobyć wszystkie nazwy ...   20.06.2013, 00:15:28
- - erix   http://stackoverflow.com/questions/109325/...-desc...   20.06.2013, 12:34:59
- - pyro   @Dejmien_85, gadasz o młokosach, a sam z siebie je...   6.10.2013, 08:57:03
|- - Dejmien_85   @pyro, nie wnikam w Twoje prywatne wierzenia. Skor...   16.10.2013, 19:29:18
|- - pyro   Cytat(Dejmien_85 @ 16.10.2013, 20:29...   18.10.2013, 14:50:07
|- - pedro84   Cytat(Dejmien_85 @ 16.10.2013, 20:29...   18.10.2013, 15:49:28
- - com   pedro84 dokładnie, ale jak widać niektórym się wyd...   18.10.2013, 16:00:28
- - Dejmien_85   Panowie, spokojnie, nikt tutaj nie chce nikomu krz...   21.10.2013, 12:12:20
- - pyro   Tu nie chodzi o gusta, bo sterownik mysql to jest ...   21.10.2013, 13:49:07
- - Dejmien_85   Pyro, Ty nam tutaj Xeny nie mieszaj do SQL Injecti...   21.10.2013, 18:11:53
|- - pedro84   Cytat(Dejmien_85 @ 21.10.2013, 19:11...   21.10.2013, 18:25:42
|- - Dejmien_85   Cytat(pedro84 @ 21.10.2013, 19:25:42 ...   21.10.2013, 19:27:03
- - nospor   @Dejmien, dla Pyro chodzi zapewne o to, ze ktos mo...   21.10.2013, 18:16:36
- - ToTamir   1. Aby się zabezpieczyć na 100% przed usunięciem t...   13.12.2013, 16:27:46
- - sowiq   Cytat(ToTamir @ 13.12.2013, 16:27:46 ...   13.12.2013, 16:34:03
5 Stron V  « < 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 Wersja Lo-Fi Aktualny czas: 20.05.2024 - 19:04