poniedziałek, lipca 23, 2007

Bezpieczeństwo aplikacji w PHP (na podstawie - http://www.peachpit.com/articles/article.asp?p=711187&seqNum=4)
  1. Wprowadzone dane z formularza oczyść ze szkodliwych kodów (stosuj strip_tags) przed stosowaniem w apliakcji.
  2. Używaj odpowiednika mysqli_real_escape_data()czyszczenia danych z formularza przed zapisem do bazy.
  3. Nie używaj ustawień globlnych, ktoś może je zmienić i sam nie bedziesz wiedział kto i kiedy, inicjuj zmienne.
  4. Stosuj niejawne ustawienia w konfiguracji
  5. Przechowuj sesje w bazie
  6. Stosowanie wyrażeń regularnych jest efektywne ale mało wydajne i obciąża procesor
  7. Do sprawdzenia jawnego typów danych otrzymanych z formularza stosuj całą gamę funkcji ctype_.
  8. O ile to możliwe stosuje metodę POST (szczególnie gdy przesyłasz hasła) - nie widać w adresie URL argumentów (wada: n ie można strony zapamietać w zakładkach ulubione).
  9. Stosowanie zachowania stanu między stronami -sesje, ciasteczka, pola ukryte (type='hidden'). Te ostatnie sa bardzo skuteczne i łatwe w obsłudze, ale nie są bezpieczne (ktoś może podglądnąć zawartość strony). Wygoda kosztem bezpieczeństwa.
  10. To samo się tyczy nadmiernego polegania na zapamietaniu stanu poprzez przekazyanie danych między stronami w URL np. ?type=3, bardzo łatwo moża wywyłać stronę z innymi wartościami (już poza logiką aplikacji).
  11. Stosowanie CAPTCHA (completely automated public Turing test to tell computers and humans apart - pakiet PEAR Text_Captcha) jako obrona przed bot'ami.
  12. Stosuj filtry PECL do kontroli typów i wartości danych. Są dwa typy tych filtrów:
    1. Dane z formularza - źródłem może być: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION, and INPUT_REQUEST:
      $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array('options'=>array('min_range'=>1)));
      if ($id) { ...
    2. Dane programowe - do kontroli danych w zmienych aplikacji:
      $id = filter_var(
    3. Sprawdzenie czy jest zmienna :
      if (filter_has_var(INPUT_POST, 'submitted')) {
    4. Tak możemy sprawdzić, czy formularz był wysłany.
  13. Filtry są wbudowane w PHP 5.2, dla wersji niższych trzeba doinstalować bibliotekę.
  14. Do logowania zastosować pakiet PECL Auth - zapewnia on standardową autentykację (stwierdzenie kto się chce dostać do portalu), lub można wykorzystać platformę rozwojową ZEND Framework.

Brak komentarzy: