[ Pobierz całość w formacie PDF ]
.Tryb kontroli ska¿eñPrzyjrzawszy siê bli¿ej, mo¿na dostrzec, ¿e przyk³adowe skrypty w tym rozdziales¹ nieco inne ni¿ w przyk³adach wczeœniejszych.Ró¿nica pojawia siê na pocz¹tkupierw­szego wiersza.Wszystkie poprzednie przyk³ady mia³y nastêpuj¹cy pierwszywiersz:#!/usr/bin/perl -wTW tym rozdziale zaczynaj¹ siê nastêpuj¹co:# !/usr/bin/perl -wRó¿nica polega na opcji -T, w³¹czaj¹cej w Perlu tryb kontroli ska¿eñ.W trybierym Perl œledzi dane przychodz¹ce od u¿ytkownika i unika wykonywania na nichwszel­kich niebezpiecznych operacji.Poniewa¿ przyk³ady z tego rozdzia³u mia³yna celu zademonstrowanie niebezpiecznego postêpowania, nie dzia³a³yby zprze³¹cznikiem -T i dlatego go pomijaliœmy.Ju¿ st¹d jasno widaæ, ¿e trybkontroli ska¿eñ generalnie jest bardzo po¿yteczny.Zadaniem tego trybu jest niedopuszczenie do tego, aby jakiekolwiek dane spozaaplikacji mia³y wp³yw na cokolwiek na zewn¹trz aplikacji.Dlatego Perl niezezwoli, aby dane wprowadzone przez u¿ytkownika zosta³y poddane dzia³aniuinstrukcji eoal, przetworzone przez pow³okê lub u¿yte w jakimkolwiek poleceniuPerla, które oddzia³uje na zewnêtrzne pliki i procesy.Tryb ten zosta³stworzony na wypadek sy­tuacji, w których bezpieczeñstwo odgrywa bardzo du¿¹rolê: na przyk³ad przy pisa­niu programów w Perlu dzia³aj¹cych jako u¿ytkownikroot lub skryptów CGI.W skryptach CGI zawsze nale¿y siê pos³ugiwaæ trybemkontroli ska¿eñ.Na czym polega mechanizm ska¿eñGdy tryb kontroli ska¿eñ jest w³¹czony, Perl monitoruje ka¿d¹ zmienn¹ pod k¹temska¿enia.Dane ska¿one, wed³ug specyfikacji Perla, to wszelkie dane, którepochodz¹ spoza kodu.Poniewa¿ wliczyæ tu nale¿y wszystko, co jest odczytywane zSTDIN (lub z dowolnego innego wejœcia plikowego), oraz wszystkie zmienneœrodowiska, pojêde to obejmuje wszelkie dane, które skrypt CGI otrzymuje odu¿ytkownika.Perl nie tylko œledzi, czy zmienne s¹ ska¿one, lecz tak¿e to, czy wraz zprzypisaniem jednej zmiennej ska¿enie przenosi siê z niej na inn¹ zmienn¹.Przyk³adowo: Perl uzna­je, ¿e metoda ¿¹dania HTTP przechowywana w zmiennej $ENV{REQUEST_METHOD} jest ska¿ona, poniewa¿ jest to zmienna œrodowiska.Jeœli terazprzypiszemy j¹ do innej zmiennej, równie¿ i ona stanie siê ska¿ona.my $metoda = $ENV(REQUEST_METHOD)Tutaj ska¿enie przenoszone jest na zmienn¹ $metoda.Nie ma znaczenia, czywyra­¿enie jest proste czy skomplikowane.Jeœli ska¿ona wartoœæ zostaje u¿yta wwyra¿e­niu, ska¿eniu ulega wynik wyra¿enia, a ka¿da zmienna, do której zostanieon przy­pisany, tak¿e stanie siê ska¿ona.W celu sprawdzenia, czy zmienna jest ska¿ona, mo¿na siê pos³u¿yæ poni¿sz¹proce­dur¹.[14 Podrêcznikowa strona perlsec do sprawdzania ska¿eñ zalecaprocedurê opart¹ na funkcji Perla kill.Nie­stety, w wielu systemach funkcjakill nie dzia³a.Podana tu procedura powinna dzia³aæ niezale¿nie odplatformy.]Zwraca ona wartoœæ „prawda" lub „fa³sz".sub czy_skazona {my $var = shift;my $pustka = substrf $var, 0, 0 );return not eval { eval "1 || $pustka" || 1 };}Do zmiennej $ pustka przypisujemy zerowej d³ugoœci pod³añcuch sprawdzanejzmiennej.Jeœli wartoœæ jest ska¿ona, a tryb kontroli ska¿eñ jest w³¹czony, togdy w nastêpnym wierszu poddamy obliczeniom zawartoœæ cudzys³owu, Perlzasygna­lizuje b³¹d.B³¹d zostaje wy³apany przez zewnêtrzn¹ (poza klamrami)instrukcjê eval, która zwraca wtedy undef.Jeœli zmienna nie jest ska¿ona lubtryb kontroli ska­¿eñ jest wy³¹czony, wyra¿enie obejmowane przez zewnêtrzneeval da wynik l.Ope­rator not odwraca wartoœæ wyniku.Co jest nadzorowane w trybie kontroli ska¿eñWielk¹ zalet¹ trybu kontroli ska¿eñ jest to, ¿e nie musimy znaæ wszystkichtechnicz­nych szczegó³Ã³w dotycz¹cych wewnêtrznych mechanizmów Perla.Jakwidzieliœ­my, Perl niekiedy poprzez zewnêtrzn¹ pow³okê przekazuje wyra¿enia,wspoma­gaj¹c interpretacjê argumentów kierowanych do wywo³añ systemowych.Zdarzaj¹ siê jeszcze trudniej uchwytne sytuacje, w których Perl wywo³ujepow³okê, lecz nie musimy siê martwiæ rozpoznawaniem wszystkich tych przypadków,poniewa¿ tryb kontroli ska¿eñ sam je rozpoznaje.Przede wszystkim Perl uznaje za potencjalnie szkodliwe ka¿de dzia³anie, któremo¿e zmodyfikowaæ zasoby na zewn¹trz skryptu.Dlatego pos³uguj¹c siê ska¿on¹nazw¹ pliku mo¿na otworzyæ plik, i odczytaæ jego zawartoœæ, jeœli tylko odbywasiê to w trybie tylko do odczytu.Jeœli jednak pos³uguj¹c siê ska¿on¹ nazw¹spróbujemy otworzyæ plik z mo¿liwoœci¹ zapisu, Perl przerwie wykonanie i zg³osib³¹d.Jak siê pozbyæ ska¿eniaTryb kontroli ska¿eñ by³by zbyt restrykcyjny, gdyby nie by³o sposobu odka¿eniada­nych.Oczywiœcie nie zale¿y nam na odka¿aniu danych bez uprzedniegosprawdze­nia, czy s¹ one bezpieczne.Tak siê dobrze sk³ada, ¿e jednympoleceniem mo¿emy zrealizowaæ obydwa zadania.Okazuje siê, ¿e w Perlu jednowyra¿enie, w którym wystêpuj¹ ska¿one wartoœci, po przetworzeniu mo¿e daæwartoœæ nieska¿on¹.Jeœli test na dopasowanie zmiennej przeprowadzamy przyu¿yciu wyra¿enia regularne­go, to pseudozmienne z wynikami dopasowywania wed³ugwzorca podanego w na­wiasie okr¹g³ym (tj.$1, $2 itd.) bêd¹ nieska¿one [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • luska.pev.pl
  •