Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Proszę o sprawdzenie bezpieczeństwa bardzo prostego kodu.
Forum PHP.pl > Forum > Przedszkole
Gość
Witam!
Dopiero zaczynam swoją przygodę z php.
Napisałem baaaaaardzo prosty kod dla małej strony:
  1. <?php
  2. include('dane/header.php'); // Dołącz nagłówek strony.
  3. include('dane/skrypt.php'); // Dołącz skrypty.
  4. include('dane/menu.php'); // Dołącz menu strony.
  5.  
  6. @$id=$_GET['id'];
  7. @$user=$_GET['info'];
  8. if (file_exists('dane/'.$id.'.php')) // 1. Jeśli istnieje plik 'dane/wartosc_id.php'
  9. include('dane/'.$id.'.php'); // to dołącz podstronę 'dane/wartosc_id.php'.
  10. else // 3. W przeciwnym razie
  11. if (file_exists('dane/info/'.$info.'.php')) // jeśli istnieje plik 'dane/info/wartosc_info.php'
  12. include('dane/info/'.$info.'.php'); // to dołącz podstronę 'dane/info/wartosc_info.php'.
  13. else // 4. W przeciwnym razie
  14. include_once('dane/glowna.php'); // dołącz stronę główną.
  15.  
  16. include('dane/footer.php'); // Dołącz stopkę strony.
  17. ?>

Czy nie pozwoli on na jakąkolwiek formę ataku na stronę?
Niby to pytanie może wydawać się głupie ale chcę mieć pewność. wink.gif

PS. Żaden z plików (header.php, menu.php itd) oprócz index.php, czyli to co dałem powyżej nie zawiera jeszczcze php, ale dałem takie rozszerzenie, żeby nie mieć dodatkowej roboty by ewentualnie w przyszłości go tam dodać. wink.gif
-gość-
Aha, zamiast @$user=$_GET powinno być @$info=$_GET bo przypadkiem skopiowałem kod ze starej wersji, gdzie akurat zmieniałem user na info i przypadkiem zapomniałem tam zmienić user na info. haha.gif

  1. <?php
  2. include('dane/header.php'); // Dołącz nagłówek strony.
  3. include('dane/skrypt.php'); // Dołącz skrypty.
  4. include('dane/menu.php'); // Dołącz menu strony.
  5.  
  6. @$id=$_GET['id'];
  7. @$info=$_GET['info'];
  8. if (file_exists('dane/'.$id.'.php')) // 1. Jeśli istnieje plik 'dane/wartosc_id.php'
  9. include('dane/'.$id.'.php'); // to dołącz podstronę 'dane/wartosc_id.php'.
  10. else // 3. W przeciwnym razie
  11. if (file_exists('dane/info/'.$info.'.php')) // jeśli istnieje plik 'dane/info/wartosc_info.php'
  12. include('dane/info/'.$info.'.php'); // to dołącz podstronę 'dane/info/wartosc_info.php'.
  13. else // 4. W przeciwnym razie
  14. include_once('dane/glowna.php'); // dołącz stronę główną.
  15.  
  16. include('dane/footer.php'); // Dołącz stopkę strony.
  17. ?>
Fifi209
Po co Ci te małpy tam?

Co do sprawdzania bałbym się w ten sposób, najpierw użyłbym basename
by_ikar
Tak jak mój przedmówca pisze, file_exists niczego nie załatwia. Sprawdza czy dany plik istnieje, co nawet potencjalnemu włamywaczowi przy ataku DT (directory transversal) nawet ułatwia sprawę, bo sam sprawdzasz za niego czy plik istnieje. basename o którym napisał @Fifi209 powinno załatwić kwestię bezpieczeństwa. Innym błędem (nie tyle co bezpieczeństwa) jest stawianie tych małp przed $GET. Kolejna sprawa to klamry. Przy rozbudowanych warunkach używaj klamer, co by sobie oszczędzić późniejszych nerwów. To samo tyczy się wcięć w kodzie, wtedy będzie to czytelniejsze. Na sam koniec, uczulam cię przed używaniem jakich kolwiek znaków przed znacznikiem otwierającym php, później będziesz mieć problemy z wysłaniem nagłówków.

A twój kod mógłby wyglądać tak:

  1. <?php
  2.  
  3. $id = empty($_GET['id']) ? null : basename($_GET['id'].'.php');
  4. $info = empty($_GET['info']) ? null : basename($_GET['info'].'.php');
  5. $path = 'dane/';
  6.  
  7.  
  8. include $path.'header.php'; // Dołącz nagłówek strony.
  9. include $path.'skrypt.php'; // Dołącz skrypty.
  10. include $path.'menu.php'; // Dołącz menu strony.
  11.  
  12.  
  13. if(file_exists($path.$id)) // 1. Jeśli istnieje plik 'dane/wartosc_id.php
  14. {
  15. include $path.$id; // to dołącz podstronę 'dane/wartosc_id.php'.
  16. } else // 3. W przeciwnym razie
  17. {
  18. if(file_exists($path.$info)) // jeśli istnieje plik 'dane/info/wartosc_info.php'
  19. {
  20. include $path.$info; // to dołącz podstronę 'dane/info/wartosc_info.php'.
  21. } else // 4. W przeciwnym razie
  22. {
  23. include_once $path.'glowna.php' ; // dołącz stronę główną.
  24. }
  25. }
  26.  
  27. include $path.'footer.php'; // Dołącz stopkę strony.
Gość
A jak wygląda sprawa prostego zabezpieczenia jeśli poprzez include wczytuję tylko menu. Strona jest mała, tylko 5podstron.
Znalazłem coś takiego <?php include('menu.htm'.$_GET['katalog']); ?>
Czy trzeba wpisać coś zamiast "katalog"? Chodzi mi o to żeby ograniczyć wczytanie czegoś z poza mojej strony.
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.