Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zabezpieczenie strony
Forum PHP.pl > Forum > Przedszkole
flaa
Helo

(Proszę wybaczyć tak ogólną nazwę tematu, ale pytania dotyczą wielu sposobów zabezpieczeń, więc ciężko mi to było bardziej sprecyzować ;>)
Stworzyłem stronę i pracuję teraz nad zabezpieczeniami. Mam więc kilka pytań :)

1. Aby dostać się do panelu admina login musi mieć nazwę panelu (czyli do admin.php wejdzie tylko użytkownik z nickiem 'admin') oraz ustawiłem poprzez htaccess dostęp do panelu tylko z mojego ip. Czy te zabezpieczenia są wystarczające? Szczególnie te pierwsze, bo możliwe, że nie będę mieć wiecznie stałego ip ;)

2. Czy muszę zabezpieczać mój panel admina przed przeróżnymi sql injection itp? Skoro nikt poza mną nie powinien tam wejść, to chyba mogę pozostawić te wszystkie POSTY bez zabezpieczeń?

3. Pozamieniałem wszystkie 'GETY' w stronie na wartości liczbowe i sprawdzam czy pobrana wartość jest liczbą: $getutw = (int)$_GET['coś']. To wystarczające zabezpieczenie jeśli chodzi o GET?

4. Mam sporo formularzy na stronie (textarea i kilka pól tekstowych), które po wysłaniu idą bezpośrednio do bazy. Czytałem na necie o różnych funkcjach na zabezpieczenie tych formularzy, ale po prostu nie ogarniam tych wszystkich możliwości zabezpieczeń. Nie chcę, by poprzez formularz dało się dopisać jakiś kod do strony, ale jednocześnie chcę zostawić możliwość pisania cudzysłowów. Możecie zaproponować jakieś konkretne funkcje, które zapewnią mi ochronę, o której mówię?

5. By pozbyć się różnych wpisów w formularzu z języka html, wpisałem wstępnie funkcję obejmującą wszystkie POSTY: $_POST = array_map('strip_tags', $_POST). Nie znalazłem jednak informacji w jaki sposób dopuścić używanie 'enterów' bez potrzeby odwoływania się do każdego POSTa, ma ktoś jakieś pomysły?

pozdrawiam
flaa
nexis
Cytat(flaa @ 27.04.2011, 19:18:03 ) *
1. Aby dostać się do panelu admina login musi mieć nazwę panelu (czyli do admin.php wejdzie tylko użytkownik z nickiem 'admin') oraz ustawiłem poprzez htaccess dostęp do panelu tylko z mojego ip. Czy te zabezpieczenia są wystarczające? Szczególnie te pierwsze, bo możliwe, że nie będę mieć wiecznie stałego ip wink.gif

Pierwsza opcja (zgodność loginu z nazwą pliku) jest niewygodna, a nie daje dodatkowego zabezpieczenia. Stwórz lepiej jeden plik, w którym będziesz trzymał wszystkich uprawnionych użytkowników i ich hasła w formie skrótu (md5(), sha1(), hash()) lub odwoływał się z poziomu tego pliku do danych zapisanych w bazie danych.
  1. <?php
  2. $users = array(
  3. 'admin' => '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', // SHA-256
  4. 'user' => '04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb', // SHA-256
  5. );
  6. ?>

Następnie dodaj w każdym pliku twojego panelu walidację tych danych i ich zgodność z zapisaną sesją.

Cytat(flaa @ 27.04.2011, 19:18:03 ) *
2. Czy muszę zabezpieczać mój panel admina przed przeróżnymi sql injection itp? Skoro nikt poza mną nie powinien tam wejść, to chyba mogę pozostawić te wszystkie POSTY bez zabezpieczeń?

Skorzystaj z PDO, a nie będziesz się musiał nad tym zastanawiać. Lepiej nie wychodzić z założenia, że nikt nie wejdzie do twojego panelu, bo wystarczy chwila nieuwagi (np. niezabezpieczony plik PHP) i droga wolna dla intruza.
  1. <?php
  2. $sql = 'SELECT name, colour, calories
  3. FROM fruit
  4. WHERE calories < :calories AND colour = :colour';
  5. $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  6. $sth->execute(array(':calories' => 150, ':colour' => 'red'));
  7. $red = $sth->fetchAll();
  8. $sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
  9. $yellow = $sth->fetchAll();
  10. ?>


Cytat(flaa @ 27.04.2011, 19:18:03 ) *
3. Pozamieniałem wszystkie 'GETY' w stronie na wartości liczbowe i sprawdzam czy pobrana wartość jest liczbą: $getutw = (int)$_GET['coś']. To wystarczające zabezpieczenie jeśli chodzi o GET?

Jeśli twoja aplikacja nie straciła na tym mocno na czytelności, to jest to stosunkowo dobre rozwiązanie przyjmowania parametrów, ale sprawdzanie wartości stricte względem predefiniowanych wartości nie jest gorszym rozwiązaniem.
  1. <?php
  2. $allowedParams = array('create', 'read', 'update', 'delete');
  3. if (isset($_GET['action']) && in_array($_GET['action'], $allowedParams, true)) {
  4. // OK
  5. }
  6. ?>


Cytat(flaa @ 27.04.2011, 19:18:03 ) *
4. Mam sporo formularzy na stronie (textarea i kilka pól tekstowych), które po wysłaniu idą bezpośrednio do bazy. Czytałem na necie o różnych funkcjach na zabezpieczenie tych formularzy, ale po prostu nie ogarniam tych wszystkich możliwości zabezpieczeń. Nie chcę, by poprzez formularz dało się dopisać jakiś kod do strony, ale jednocześnie chcę zostawić możliwość pisania cudzysłowów. Możecie zaproponować jakieś konkretne funkcje, które zapewnią mi ochronę, o której mówię?

Patrz punkt 2 dotyczący PDO.

Cytat(flaa @ 27.04.2011, 19:18:03 ) *
5. By pozbyć się różnych wpisów w formularzu z języka html, wpisałem wstępnie funkcję obejmującą wszystkie POSTY: $_POST = array_map('strip_tags', $_POST). Nie znalazłem jednak informacji w jaki sposób dopuścić używanie 'enterów' bez potrzeby odwoływania się do każdego POSTa, ma ktoś jakieś pomysły?

Patrz punkt 2 dotyczący PDO.
flaa
Dzięki za szybką i wyczerpującą odpowiedź ;)
W takim razie póki co poświęcę się lekturze na temat tego PDO, bo nigdy wcześniej o tym nie słyszałem ;>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.