Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczeństwo skryptów PHP, Jak zabezpieczyć się przed włamaniem
Diwi
post 5.05.2005, 13:21:40
Post #1





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


Witam.

Chciałbym rozpocząć temat o bezpieczeństwie skryptów php. Na forum istnieje już temat o bezpieczeństwu przy wykonywaniu zapytania SQL lecz nie ma o ogólnym bezpieczeństwie skryptów.

1. Złe używanie include.

Często dołączamy pliki dynamicznie pobierając miejsce gdzie znajduje się plik metodą GET.

Przykładowy adres:
http://www.jakas-strona.pl/index.php?plik=katalog.php

Kod php:
  1. <?php
  2. include($_GET['plik']);
  3. ?>


Taki skrypt dokonałby dołączenia pliku katalog.php do skryptu lecz co by się stało gdyby włamywacz wpisał taki adres:
http://www.jakas-strona.pl/index.php?plik=...t-niszczacy.php

Dajmy na to że skrypt znajdujący się na serwerze hakera wygląda tak:

  1. <?php
  2.  
  3. $katalog = opendir('./'); /* skrypt otwiera katalog w którym się znajduje (zostaje wywołany */
  4.  
  5. while ($plik = readdir($katalog)) {
  6.  
  7. unlink($file);
  8.  
  9. }
  10.  
  11. ?>


No i jeżeli pliki w katalogu mają uprawnienia pozwalające na usunięcie ich przez skrypt to możemy się pożegnać z plikami w katalogu.

Jak temu zapobiec questionmark.gif

Rozwiązanie 1.

Tworzymy taki include:
  1. <?php
  2. include('./'.$_GET['katalog']);
  3. ?>


Taka instrukcja pozwala na dołączanie jedynie plików które znajdują się w katalogu ze skryptem czyli nie można załączyć pliku z innego serwera.

Ja narazie pamiętam tylko tyle lecz jeżeli znacie jakieś inne błędy popełniane przez programistów a także sposoby walczenia z nimi to się tutaj dopiszcie smile.gif

Pozdrawiam

// prosiłbym moderatorów (jeżeli można) o przyklejenie tego tematu

---
Przyklejone - hwao
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sobstel
post 30.05.2006, 08:38:20
Post #2





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


zabezpieczając się najpeirw należy się zastanowić przed czym się zabezpieczamy

1. po co htmlspecialchars(strip_tags( ? tego trzeba używać przy umieszczaniu danych w kodzie html (chyba ze na zapas), nie mowiac o tym ze w twoim przypadku jest to bledny zapis poniewaz zarowno strip_tags jak i htmlspecialchars nie moze przyjmowac jako argumentu tablicy. poza tym, przed sprawdzeniem poprawnosci danych nie powinno ich sie raczej zmieniac, uwazam ze walidacje powinno sie dokonywac na surowych danych takich jak dostarczono.

2. $_SERVER['HTTP_REFERER'] nie nawsze jest ustawiane,a moze tez sie roznic jak przechodzi przez rozne proxy. lepszym rozwiazaniem jest zastosoawnie jakiegos tokena (umieszczenie tokena w polu typu hidden i w sesji i potem sprawdzenie czy sie pokrywaja). btw, jest to zabezpieczenie przed proba bezposredniego wyslania danych z pominieciem wlasciwego formularza na stronie.

3. wszystko zalezy od przeznaczenia, jesli uwaznie przeczytales watek to byc moze zauwazyles ze nikt tutaj nie ma jednej skutecznej metody zabezpieczania. jesli umieszczasz dane w zapytaniach to trzeba np. uzyc mysql_real_escape_string, jesli dane wyswietlasz to htmlspecialchars, jesli chcesz sie zabezp przed xss to strip_tags [nawet bez tagow html da sie xss zastosowac, chociazby przez nieumiejetnie wykrozystany i napisany bbcode]. kombinacji i mozliwosc jest wiele, a bardzo duzo zalezy od specyfikacji danego problemu.

Ten post edytował sopel 30.05.2006, 08:40:02


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
mumin.php
post 30.05.2006, 10:33:54
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.05.2006

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


Cytat(sopel @ 30.05.2006, 09:38 ) *
2. $_SERVER['HTTP_REFERER'] nie nawsze jest ustawiane,a moze tez sie roznic jak przechodzi przez rozne proxy.


Przyznaję, że niestety nie rozumiem tego wytłumaczenia sad.gif

jeśli url www.mojastrona.costam?name=formularz
wywołuje skrypt.php (wywoływany tylko if($_GET['name']=='formularz') ) w którym:
  1. <?php
  2. if(!$_POST['wyslij'])
  3. { 
  4. pokaż formularz 
  5. }
  6. else
  7. {
  8. if ($_SERVER['HTTP_REFERER'] !='www.mojastrona.costam?name=formularz')
  9. {
  10. die ('nie rob nic');
  11. }
  12. else
  13. {
  14.  wyslij formularz
  15. }
  16. }
  17. ?>


to jak to można obejść?

jeśli pytanie jest bardzo lamerskie to już więcej nie będę męczył
Go to the top of the page
+Quote Post
sobstel
post 4.06.2006, 19:57:25
Post #4





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(mumin.php @ 30.05.2006, 11:33 ) *
Przyznaję, że niestety nie rozumiem tego wytłumaczenia sad.gif


nigdy nie mozesz polegac na HTTP_REFERER nawet jak nikt przy nim nie majstruje. ktos moze laczyc sie z twoja strona przez proxy a proxy czasami lubia mieszac z naglowkami HTTP, przez co ten sam uzytkownik moze zwracac np. rozne USER_AGENT, to samo tyczy sie HTTP_REFERER. takze, przegladarka moze wcale tego naglowka nie wysylac i wtedy $_SERVER['HTTP_REFERER'] jest puste nawet, gdy ktos przechodzi z jednej strony na drugą. w ten sposob przez swoje zabezpieczenie ograniczasz dostepnosc aplikacji dla niektorych uzytkownikow. dokladajac fakt, o ktorym wspomnial powyzej Speedy, powoduje to ze HTTP_REFERER raczej nie jest najlepszym rozwiazaniem, nie sadzisz?

Ten post edytował sopel 4.06.2006, 19:58:38


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post

Posty w temacie
- Diwi   Bezpieczeństwo skryptów PHP   5.05.2005, 13:21:40
- - bregovic   Zaczynając od podstaw, to jakiekolwiek używanie zm...   5.05.2005, 15:49:34
- - Wave   A najczęstszym błędem jest stosowanie zmiennych be...   5.05.2005, 16:24:58
- - sopel   Cytat(bregovic @ 2005-05-05 15:49:34)Zaczynaj...   5.05.2005, 16:36:52
- - Speedy   To ja dodam od siebie jeszcze, że niektóre osoby p...   5.05.2005, 17:06:27
- - yavaho   Mozna nieco przefiltrowac zmiena ktora pzechowuje ...   8.05.2005, 15:03:31
- - matid   Cytat(yavaho @ 2005-05-08 16:03:31)@Speedy cz...   8.05.2005, 17:06:28
- - sopel   Cytat(matid @ 2005-05-08 17:06:28)Cytat(yavah...   8.05.2005, 17:27:21
- - Ociu   sprawdzanie $_GET'ów etc. : [PHP] pobierz...   8.05.2005, 18:21:25
- - vala   a nie lepiej zrobic prosty switch ? ustalimy sobie...   14.05.2005, 18:52:01
- - AxZx   Cytat(vala @ 2005-05-14 17:52:01)a nie lepiej...   21.05.2005, 12:24:56
- - sopel   Cytat(AxZx @ 2005-05-21 12:24:56)@Vala - mozn...   21.05.2005, 13:19:52
- - Lars   ja mam prosty skrypt: [PHP] pobierz, plaintext ...   1.07.2005, 08:45:41
- - sopel   Cytat(Lars @ 2005-07-01 08:45:41)czy file_exi...   1.07.2005, 09:25:20
- - yavaho   Cytatczy file_exists zabezpiecza includowanie z in...   1.07.2005, 09:42:14
- - gu35t   pamietejcie o zonku jaki moze zrobic haxior znakie...   1.07.2005, 11:18:56
- - sopel   1. kolega pytal tylko czy mozna otworzyc w ten spo...   1.07.2005, 11:22:21
- - Lars   co do: http://www-users.mat.uni.torun.pl/~ghost/i....   3.07.2005, 19:52:24
- - sopel   Cytat(Lars @ 2005-07-03 19:52:24)co do: http:...   3.07.2005, 20:00:01
- - Vengeance   @bregovic: Twój sposób [PHP] pobierz, plaintext ...   7.07.2005, 19:55:39
- - dr_bonzo   A wystarczy dodac $tablica = array(); przed ...   8.07.2005, 14:41:45
- - Lars   Jeżeli już trzeba zrobić coś t...   24.07.2005, 13:10:05
- - Vaticinator   A jest jakaś możliwość, żeby wybrane pliki dało si...   16.09.2005, 11:21:56
- - sopel   Cytat(Vaticinator @ 2005-09-16 11:21:56)A jes...   16.09.2005, 11:40:41
- - bregovic   Cytat(Vaticinator @ 2005-09-16 11:21:56)A jes...   28.09.2005, 15:18:54
- - mike_mech   W związku z ostatnim postem tutaj, który poruszał ...   21.11.2005, 00:18:04
- - huntercs   Ja stosuję w sumie proste rozwiązanie, dodaje tylk...   1.03.2006, 10:50:25
- - nospor   No ale poco trzeba pisac nazwe skryptu? Skoro i ta...   1.03.2006, 10:56:44
- - mike_mech   ~huntercs możesz to zrobić bardziej elastycznie i ...   1.03.2006, 10:57:57
- - vedeney   I like php-coding in this way [PHP] pobierz, plai...   1.03.2006, 18:17:47
- - ave   nie prosciej switch-em ? [PHP] pobierz, plaintext ...   6.03.2006, 13:57:15
- - Speedy   Switch może być dobry w przypadku, gdy jest mało s...   6.03.2006, 16:07:32
- - the_foe   Jezeli programuje obiektowo to automatyzuje wybier...   7.03.2006, 19:30:46
- - LamaMASTER   Cytat(Diwi @ 2005-05-05 12:21:40)1. Złe używa...   11.04.2006, 21:50:27
- - nospor   CytatLudzie litości! Wielkie zabezpieczenia, a...   11.04.2006, 21:58:04
- - kszychu   A ja z kolei dodam, że3 należałoby się przyjrzeć s...   12.04.2006, 08:32:56
- - LamaMASTER   Na moim serwerze taki trick nie działa, dlatego by...   12.04.2006, 11:32:16
- - nospor   I tylko dlatego, ze u ciebie ten trick nie dziala,...   12.04.2006, 11:34:48
- - LamaMASTER   Cytatps: wspominales cos o zwróceniu honoru... jak...   12.04.2006, 17:46:53
- - Vengeance   Ale przy postgresql, mssql czy oracle to już zadzi...   12.04.2006, 17:52:35
- - thornag   Wracajac do powyższej dyskusji na temat include to...   13.04.2006, 14:29:58
- - kszychu   @thornag: dziękujemy za jakże wnikliwą analizę pro...   13.04.2006, 16:40:36
- - J4r0d   Co znaczy apach na chroocie?   13.04.2006, 21:27:45
- - thornag   Cytat(kszychu @ 2006-04-13 15:40:36)@thornag:...   14.04.2006, 02:19:00
- - Nightwalker   Witam, Mam pytanie, czy ten kod jest w miare bezp...   14.04.2006, 03:26:13
- - mumin.php   Witam Jestem nowy na forum i zgodnie z sugestią m...   30.05.2006, 07:45:59
- - sopel   zabezpieczając się najpeirw należy ...   30.05.2006, 08:38:20
|- - mumin.php   Cytat(sopel @ 30.05.2006, 09:38 ) 2. ...   30.05.2006, 10:33:54
|- - sopel   Cytat(mumin.php @ 30.05.2006, 11:33 ) Prz...   4.06.2006, 19:57:25
- - mumin.php   to może trochę sprecyzuję Te zagrożone formularze...   30.05.2006, 09:26:45
|- - sopel   Cytat(mumin.php @ 30.05.2006, 10:26 ) ...   30.05.2006, 09:29:06
- - Speedy   Wystarczy wysłać odpowiedni nagłówek i w nim zdefi...   4.06.2006, 19:18:58
- - NuLL   Podziele sie z Wami moim pomyslem jak ja zalatwiam...   5.06.2006, 01:40:06
- - Vengeance   @NuLL: Skoro sprawdzałeś to OK, ale dla mnie to ża...   21.07.2006, 21:09:53
- - mariuszn3   NuLL a co z tymi co mają wyłączoną obsługę ciastec...   22.07.2006, 12:23:11
|- - NuLL   Cytat(mariuszn3 @ 22.07.2006, 13:23 ) NuL...   26.07.2006, 13:16:24
- - Turgon   Czy przechowywanie id sesji w ciachu jest bezpiecz...   1.08.2006, 18:26:12
|- - sopel   Cytat(Turgon @ 1.08.2006, 19:26 ) Czy prz...   1.08.2006, 19:32:58
- - Turgon   O to właśnie mi chodziło. Skrypt miałby się w przy...   2.08.2006, 08:21:50
- - d@ro   W swoim cms, nie wiem czy zrobić tak: [PHP] p...   4.08.2006, 10:43:27
- - kalu111   A jakich powinno sie ustrzegac znakow w zmiennych ...   20.08.2006, 09:55:10
- - iks   A czy mój tok myślenia jest dobry? Mam zrobione lo...   3.11.2006, 13:36:29
- - Saddam92   a czy moglibyście powiedzieć czy ten skrypt jest b...   29.11.2006, 13:40:53
- - Termit_   A jak ktoś poda w zmiennej coś typu "../../.....   30.11.2006, 21:36:25
- - Saddam92   @termit: to do mnie było jesli tak to raczej nie ...   30.11.2006, 23:17:28
- - Najki   Przed chwilą przeczytałem ten artyku...   1.12.2006, 10:26:12
- - mariuszn3   Nigdy nie powinno się ufać nagłówkom http, nagłówk...   1.12.2006, 13:38:15
- - tumeks   Czyli jeśli będę miał np. wstawiony kod: [PHP] pob...   5.12.2006, 19:01:57
- - Sedziwoj   @Najki jest proste rozwiązanie nadanie pliku własn...   7.12.2006, 13:50:49
- - Saddam92   no dobrze.. tylko ze tutaj jest sprawdzany typ pli...   8.12.2006, 21:42:34
- - Sedziwoj   bardziej wiarygodną rzeczą jest mime, bo plik imag...   9.12.2006, 12:08:30
- - cadavre   http://pl.php.net/manual/pl/function.getimagesize....   9.12.2006, 13:50:07
- - Sedziwoj   No to ten problem da się rozwiązać Wystarczy wyko...   10.12.2006, 18:41:56
- - mariuszn3   Nie wynajdujcie koła na nowo. To wszystko już zost...   10.12.2006, 18:49:29
- - Sedziwoj   No tak jak ma się sklerozę... to trzeba się narobi...   10.12.2006, 20:00:12
- - orglee   Zabezpieczanie tablicy $_GET ( Żywcem wyjęte ...   31.01.2007, 13:44:38
- - Sedziwoj   Tak mnie zastanawia co się stanie jeśli $_GET...   2.02.2007, 03:30:17
- - insenic   Czy zabezpieczenie katalogu przez .htaccess jest 1...   25.02.2007, 16:21:27
|- - sopel   Cytat(insenic @ 25.02.2007, 16:21:27 ...   26.02.2007, 08:51:32
- - Ivellios   Witam, chciałbym się was zapytać, czy przedstawion...   2.03.2007, 23:03:09
- - Sedziwoj   Ivellios przeczytaj to co już jest, tam znajdziesz...   4.03.2007, 02:39:44
- - Ivellios   Co do tego addslasha to zmieniłem go na mysql_esca...   4.03.2007, 07:54:58
- - upaupa   Przeczytałem cały topic - filtrowanie, if fileexi...   27.03.2007, 14:11:39
- - Sedziwoj   upaupa widocznie nie czytałeś wszystkiego... bo ju...   27.03.2007, 16:00:29
- - upaupa   a co za różnica czy switch czy else if? - żadna op...   27.03.2007, 17:09:08
|- - Sedziwoj   Przecież przejrzystość i łatwość rozbudowy kodu je...   27.03.2007, 18:27:51
- - dantekir   Witam, Postanowiłem popracować troche nad bezpiec...   29.04.2007, 16:47:22
- - bełdzio   ad1. google + mod_rewrite ad2. w konfigu php ew. w...   29.04.2007, 17:07:31
- - radex_p   O jednym zapomnieliście - Z includowaniem plików p...   4.05.2007, 17:38:46
- - Kicok   1. [PHP] pobierz, plaintext <?php$id = $_GET...   4.05.2007, 17:49:27
|- - radex_p   Cytat(Kicok @ 4.05.2007, 16:49:27 ) 1...   6.05.2007, 15:52:45
- - bełdzio   @Kicok pkt1 == pkt2 to że dodawane jest automatyc...   5.05.2007, 00:12:38
- - peen   hmm... trochę tu śmietnik... zgubiłem się gdzieś n...   31.05.2007, 02:52:48
- - bełdzio   boo ;-) ad1. Null byte attack ad2. nic jeśli pó...   31.05.2007, 18:53:07
- - peen   ad boo. hmm... spróbuj zrobić tak żeby n...   1.06.2007, 12:28:42
- - bełdzio   ad ad boo, to jest błąd i tyle, co za problem prze...   1.06.2007, 14:14:53
- - peen   ad ad ad 1 wpisuje nazwę innego pliku znajd...   1.06.2007, 18:47:30
- - bmL   Czytam i czytam i już dobre pół godziny czytam i n...   5.09.2007, 21:06:27
- - Sedziwoj   po pierwsze ten skrypt nie działa po drugie zamias...   5.09.2007, 22:41:49
- - bmL   Cytat(Sedziwoj @ 5.09.2007, 23:41:49 ...   6.09.2007, 15:01:46
4 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: 12.06.2024 - 12:07