Załóż konto Strona główna  ·  Foto  ·  Download  ·  Twoje konto  ·  Wyślij newsa  ·  Forum  

Menu strony
Radio Radio
TV Video-stacja
Forum
Regulamin & Kontakt
Wyraź siebie
Twoje konto

Zasoby

Ostatnie posty na Forum?

Społeczność TS

Bezpieczeństwo w skryptach php (Kategoria >> Haker)
Bezpieczeństwo sprawa największej wagi


Pisząc skrypt w php najwiekszą wagę należy przywracać do bezpieczeństwa...


Napisanie dobrej aplikacji internetowej to nie wszystko, napisanie dobrej, wydajnej i bezpiecznej aplikacji to coś. Odnośnie bezpieczeństwa, powiem jedynie, że jest to najbardziej uciążliwe zajęcie, ponieważ programista sam musi przewidzieć wszystkie możliwe opcje ataku. Często błędy wynikają po prostu z przegapienia jakieś możliwości, co w dość dużych projektach może zdarzać się często. Ludzką rzeczą jest mylić się, ludzką rzeczą jest też uczyć się na błędach...

Poniżej przedstawiam bezpieczne rozwiązania:

Sam decyduj skąd chcesz odczytać zmienną, czy z formularza, czy z cookies, czy metodą get, czy też post.

1). Zawsze korzystaj z tablic przy odczytywania zmiennych:

- $_SERVER[] - zmienne serwerowe, np USER_AGENT - nazwa przeglądarki jaką używasz...
- $_GET[] - zmienne przekazane za pomocą linka lub formularza z metodą GET (generalnie nie zalecane).
- $_POST[] - zmienne z formularzy metoda POST niewidoczna dla użytkownika (bezpieczna).
- $_COOKIE[] - zmienne z cookies.
- $_FILES[] - zmienne powstałe przy przesyłaniu pliku na serwer.
- $_SESSION[] - zmienne zarejestrowane jako zmienne sesji.
- $_REQUEST[] - zmienne przekazywane do skryptu metodami $_GET, $_POST.
- $_ENV[] - zmienne środowiskowe systemu np $_ENV["SERVER_PORT"].

Przy włączonym register globals, każda zmienna będzie traktowana tak samo, chyba że zdeklarujemy skąd np zmienna $login ma pochodzić, zakładam że z formularza metodą POST, czyli $_POST['login'].

  • Dobrze: if($_POST['login']=="ts"){echo'ok';}else{echo'error';}

  • Źle: if($login=="ts"){echo'ok';}else{echo'error';}


  • Teraz wywołanie strony z zapytaniem ?login=ts zakończy się wyświetleniem komunikatu error. Dzieje się tak, ponieważ zadeklarowałem, że zmienna $login należy do tablicy $_POST[], a nie $_GET[]... Gdybym tego nie zrobił wszystko działało by idealnie, wbrew mojej woli...

    2). Ponadto zawsze starannie filtruj dane wprowadzane przez użytkowników, możesz zastosować nasza funkcję filtrującą tekst (filtr_tekstu) lub też wbudowane funkcje filtrujące php:

  • strip_tags($zmienna); - usunie niebezpieczne znaki

  • htmlentities($zmienna); - zamienni niebezpieczne znaki na odpowiednie znaki ucieczki


  • 3). Stosuj też wyrażenia regularne które zweryfikują poprawność danych:

    ^       początek napisu/linii
    $       koniec napisu/linii
    .       każdy znak, z wyjątkiem znaku nowego wiersza
    *       0 lub więcej poprzedzających znaków/wyrażeń
    +       jeden lub więcej poprzedzających znaków/wyrażeń
    ?       0 lub 1 poprzedzających znaków/wyrażeń
    {x}     dokładnie x poprzedzających znaków/wyrażeń
    {x,}    x lub więcej poprzedzających znaków/wyrażeń
    {x,y}   od x do y poprzedzających znaków/wyrażeń
    []      każdy znak lub zakres znaków podanych w nawiasie
    ()      nawiasy grupujące wyrażenie
    $1..$9  odwołanie do wybranej grupy wyrażeń
    x|y     alternatywa - znak/wyrażenie x lub y
    \r      powrót karetki (znak ASCII 13)
    \n      przejście do nowej linii (znak ASCII 10), unixowy enter
    \r\n    windowsowy enter, znak nowej linii
    \t      tabulacja (znak ASCII 9)
    \f      nowa strona, wysunięcie strony (znak ASCII 12)
    \d      cyfry, czyli to samo co [0-9]
    \D      wszystko oprócz cyfr, czyli to samo co [^0-9]
    \w      znaki alfanumeryczne z podkreśleniem, czyli [a-zA-Z0-9_]
    \W      wszystko co nie jest znakami alfanumerycznymi, czyli [^a-zA-Z0-9_]
    \s      białe znaki - spacja, \r, \n, \t, \f, czyli [ \r\n\t\f]
    \S      wszystko co nie jest białym znakiem, czyli [^ \r\n\t\f]
    \b      granica słowa, czyli znaki interpunkcyjne i niealfanumeryczne
    \B      wszystko co nie jest granicą słowa, czyli wnętrze słowa
    \       przywraca pierwotne znacznie znakom specjalnym
    .*      dowolna ilość dowolnych znaków
    .+      jeden lub więcej dowolnych znaków
    
    dodatkowe operatory stosowane w wyrażeniach zgodnych z POSIX
    
    [:alnum:]    znaki alfanumeryczne (litery i cyfry)
    [:alpha:]    znaki alfabetyczne (litery)
    [:blank:]    spacja
    [:cntrl:]    znaki steruj±ce
    [:digit:]    cyfry
    [:graph:]    wszystko co nie jest białym znakiem
    [:lower:]    małe litery
    [:upper:]    duże litery
    [:punct:]    znaki interpunkcyjne
    [:space:]    białe znaki
    


    4). Gdy korzystasz z cookies (polecam sesje, są o wiele bardziej bezpieczne, niż ciasteczka) zawsze szyfruj je za pomocą funkcji base64_decode(); i base64_encode();, lub innych funkcji szyfrujących z zastosowaniem kluczy. Pamiętaj tak że, aby nie umieszczać w cookies danych określających poziom dostępu...


    Jeżeli jesteś początkującym, zapamiętaj to, co jest tu napisane. Wytworzenie dziurawej aplikacji web jest niezwykle proste, naprawienie szkód jakie może wywołać złośliwa osoba, raczej do prostych zadań nie należy (od malej modyfikacji po przejęcie kontroli nad serwerem, serwisem lub usunięcie strony)...








    Autor: Duch

    Prawa autorskie © . Wszelkie Prawa Zastrzeżone.



    Opublikowane: 2005-06-30 (518 odsłon)

    [ Wróć ] Biblioteka index


    Wszelkie prawa zastrzeżone 2004-2012 © Twoja-Strona.Net. Korzystanie z serwisu jest równoznaczne z akceptacją regulaminu

    Teledyski.Info | Pobieracz.Net | Hostuje.net | Torenty.biz | Wordpressy.pl | 1ts.pl

    System Cache v1.0 włączony. Kopia cache.