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
define(BASE_DIR,'/usr/local/');
// jesli mamy kropke w nazwie katalogu to moze oznaczac, ze gosciu probuje nas wykiwac
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

, ale mam nadzieję, że lekko rozjaśniłem kwestię.