Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: eval
Forum PHP.pl > Forum > PHP
jureusz
W zasadzie to bardziej teoretyczne pytanie aniżeli praktyczne. Chodzi mi o zagrozenia jakie niesie niezabezpieczenie formularza przed mozliwoscia wywolania eval(). Jezeli moglbym prosic o jakies konkretne przyklady i moze jakies odnosniki info "o bezpieczenstwie formularzy".
lukaswoj
Cytat
Chodzi mi o zagrozenia jakie niesie niezabezpieczenie formularza przed mozliwoscia wywolania eval().


Niewiem co masz na myśli, ale normalnie użytkownik nie jest w stanie w żaden sposób sprawić, że jakakolwiek treść wysłana do przeglądarki (czy to z formularza, z urla czy z ciastek) - została wykonana w skrypcie poprzez funkcję eval() - chyba że zrobisz coś takiego:

[php:1:532e036852]
<?php
eval($_GET{'zmienna'});
?>
[/php:1:532e036852]

No ale czegoś takiego NIE MOŻNA ROBIĆ.

Jeśli już chcesz w jakiś sposób użyć danych wysłanych przez przeglądarkę w kodzie php, który chcesz wykonać to musisz te dane dokładnie sprawdzić.

Na przykład, jeśli za pomocą skryptu php generujesz listing katalogów i chcesz pozwolić użytkownikowi na podróżowanie po podkatalogach - to ja bym proponował zrobić to tak:
[php:1:532e036852]
<?php
// katalog powyzej ktorego nie bedzie mozna wyjsc - taki chroot smile.gif
define(BASE_DIR,'/usr/local/');

// jesli mamy kropke w nazwie katalogu to moze oznaczac, ze gosciu probuje nas wykiwac smile.gif
if(strstr('.',$_GET{'sciezka'}))
die("spadaj");

// jesli pierwszy znak to slash to jest to odwolanie w odniesieniu do glownego katalogu systemu i wtedy tez mowimy papa
if(substr($_GET{'sciezka'},0,1))
die("spadaj");

// no i teraz juz mozemy bezpiecznie zbudowac sciezke ktora za chwile wyslitujemy

$sciezka=BASE_DIR.'/'.$_GET{'sciezka'};

system("ls -al $sciezka");
?>
[/php:1:532e036852]

Powyższy przykład zakłada, że prośby zmiany listowanego katalogu przychodzą do serwera w postaci np: 'podkatalog/katalog', 'podkatalog', podkatalog/drugipodkatalog/trzecipodkatalog' i przchodzą w zmiennej "sciezka" przekazanej metodą GET.

[b]Nigdy nie używaj danych przychodzących z zewnątrz bez wcześniejszego ich sprawdzenia pod kątem niechcianej zawartości !!!

To taki mocno toporny przykład smile.gif, ale mam nadzieję, że lekko rozjaśniłem kwestię.
Majdan
Dodam, że przed wyświetleniem informacji na stronie, które mogą być podejrzewane o niechciany kod, który mógłby dużo "namieszać" na stronie zalecane jest użycie htmlspecialchars() lub strip_tags().
jureusz
Czy jest mozliwosc wyswietlenia, zapisania czy w jakis inny sposob podgladniecia kodu zrodlowego?
Majdan
Kodu źródłowego strony HTML oczywiście. Natomiast kodu php nie da się, bo jest on już "wygenerowany" przez serwer i przeglądarka otrzymuje gotowy kod bez php.
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.