Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> eval
jureusz
post 30.04.2004, 12:46:33
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 16.03.2004

Ostrzeżenie: (10%)
X----


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".
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
lukaswoj
post 30.04.2004, 13:03:43
Post #2





Grupa: Zarejestrowani
Postów: 136
Pomógł: 0
Dołączył: 2.01.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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ę.


--------------------
Pozdrawiam
Łukasz Wojciechowski
New Generation Software
+48 602 214 629
http://www.ngsoft.pl
Go to the top of the page
+Quote Post
Majdan
post 30.04.2004, 13:29:40
Post #3





Grupa: Zarejestrowani
Postów: 445
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Tomaszów Lubelski

Ostrzeżenie: (10%)
X----


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().


--------------------
Go to the top of the page
+Quote Post
jureusz
post 30.04.2004, 19:17:16
Post #4





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 16.03.2004

Ostrzeżenie: (10%)
X----


Czy jest mozliwosc wyswietlenia, zapisania czy w jakis inny sposob podgladniecia kodu zrodlowego?
Go to the top of the page
+Quote Post
Majdan
post 30.04.2004, 19:24:19
Post #5





Grupa: Zarejestrowani
Postów: 445
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Tomaszów Lubelski

Ostrzeżenie: (10%)
X----


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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:25