Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Pobieranie plików z kilku folderów
Forum PHP.pl > Forum > PHP
kamilns
Witam Serdecznie


Posiadam stronę opartą na php. Pliki (tekstowe) są ciągnięte z folderu o nazwie "site" np. plik o nazwie prawo.txt ma adres www.kowalski.pl/prawo.html (maskowanie urli mam także)

Potrzebuję zrobić aby pliki były dodatkowo ciągnięte jeszcze z jednego katalogu - oprócz katalogu site jeszcze z katalogu o nazwie: "inne"

Bardzo proszę o pomoc w przerobieniu tego kodu (wnioskuje, że to on odpowiada za to - chyba środkowa część tego kodu):

<?php
if ($_GET['pg'] == "") {

include ('site/main.php');

} else {

include ("site/$_GET[pg].php");
}
echo '<br>';
$cnt->draw();
?>


Bardzo proszę o przerobienie tego w miarę możliwości - ja niestety nie mam o tym zielonego pojęcia jak modyfikować taki kod. Będę bardzo wdzięczny za uzyskaną pomoc.


Kamil
wlamywacz
Można jaśniej ? A i na moje oko ten kod jest troszkę niebezpieczny z tym includowaniem tongue.gif
pojas
  1. <?php
  2. if( file_exists( './site/'.$_GET['pg'].'.php' ) && ! file_exists( './inne/'.$_GET['pg'].'.php' ))
  3. {
  4. // jeśli plik istnieje (TYLKO w folderze "site") wczytuje jego kod
  5. include( './site/'.$_GET['pg'].'.php' );
  6.  
  7. } elseif( file_exists( './inne/'.$_GET['pg'].'.php' ) && ! file_exists( './site/'.$_GET['pg'].'.php' ) )
  8. {
  9. // jeśli plik istnieje (TYLKO w folderze "inne") wczytuje jego kod
  10. include( './inne/'.$_GET['pg'].'.php' );
  11. } else
  12. {
  13. // w przeciwnym przypadku wczytuje kod pliku "main.php"
  14. // czyli także w przypadku takich samych plików w folderach "site" i "inne"
  15. include( './site/main.php' );
  16. }
  17. ?>


O to chodzi? guitar.gif
kamilns
Bardzo ale to bardzo dziękuję "Pojas" snitch.gif Śmiga aż miło. Mam jeszcze jedno pytanie w związku z tym - czy jest to bezpieczne dla strony ? (ten kod odpowiada za wyświetlanie mojej strony - plików - treści. Użytkownik "włamywacz" stwierdził, że może to być niebezpieczne.
pojas
Wydaje mi się, że jest dobrze. Jednak mogę się mylić tongue.gif

Cytat
na moje oko ten kod jest troszkę niebezpieczny

Możliwe, że chodziło mu o to, że wczytywanie pliku "na ślepo" jest niebezpieczne, bo włamywacz może wklepać magiczny adres a wczytany zostanie kod niekoniecznie z Twojego serwera, niekoniecznie bezpieczny i przyjazny kod guitar.gif ( przeczytaj ten post, a najlepiej cały temat ).
Nie wydaje mi się, żeby taki chwyt można było zastowować na tym skrypcie.
envp
a co da :

?pg=../../../../../../../../../../../etc/passwd%00

snitch.gif
pojas
Cytat
Rozwiązanie 1.

Tworzymy taki include:
Kod php
  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.


./ jest w kodzie...hmm
Pewnie chodzi o wyświetlenie tajnego pliku w ramach serwera, ale czy te ./ nie jest rozwiązaniem? Jeśli nie jest, moża wykorzystać funkcję ctype_alnum:
  1. <?php
  2. if( ctype_alnum($_GET['pg']) == true || $_GET['pg'] == '' )
  3. {
  4. if( file_exists( './site/'.$_GET['pg'].'.php' ) && ! file_exists( './inne/'.$_GET['pg'].'.php' ))
  5. {
  6. // jeśli plik istnieje (TYLKO w folderze "site") wczytuje jego kod
  7. include( './site/'.$_GET['pg'].'.php' );
  8.  
  9. } elseif( file_exists( './inne/'.$_GET['pg'].'.php' ) && ! file_exists( './site/'.$_GET['pg'].'.php' ) )
  10. {
  11. // jeśli plik istnieje (TYLKO w folderze "inne") wczytuje jego kod
  12. include( './inne/'.$_GET['pg'].'.php' );
  13. } else
  14. {
  15. // w przeciwnym przypadku wczytuje kod pliku "main.php"
  16. // czyli także w przypadku takich samych plików w folderach "site" i "inne"
  17. include( './site/main.php' );
  18. }
  19. }
  20. ?>

Teraz jest bezpieczniej? Teraz jest bezpiecznie ? guitar.gif
kamilns
Nie znam się na tym ale pewnie jest bezpieczniej ;-) Dziękuję "Pojas" za okazaną mi pomoc. Masz duże piwo u mnie ;-)
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.