publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

TAGI: php

2007-09-29 12:05  |  Marcin Domasławski, Marcin Sztolcman

13 błędów, których programista PHP popełniać nie powinien

13 błędów, których programista PHP popełniać nie powinien

PHP pozwala na budowanie w prosty sposób aplikacji sieciowych, ale mimo tego wydajność tworzonych za jego pomocą programów często pozostawia wiele do życzenia. Bez względu na wiedzę i doświadczenie programisty każdy kod PHP powinien być poddany testom typu white box, zwłaszcza jeśli chodzi o testy statyczne i dynamiczne, a także pokrycia kodu. Spowodowane jest to tym, że wiele problemów zauważanych jest dopiero w wyniku podania pewnych niestandardowych danych wejściowych, których programista nie przewidział podczas pisania. Pokazujemy, jakie błędy nagminnie pojawiają się w skryptach oraz w jaki sposób je poprawić.

1. Register globals

Register globals jest jedną z najbardziej znanych i rozpoznawanych opcji konfiguracyjnych PHP. Włączona powoduje, że parametry przekazywane do skryptu będą automatycznie rejestrowane jako zmienne globalne. Konsekwencją tego może być nadpisanie krytycznych dla danego skryptu danych. W dużym uproszczeniu problem można przedstawić, podając do skryptu parametry o nazwach używanych wewnątrz kodu, np. http://www.mojserwer.pl/index.php?Is_Admin=1

if ( $Is_Admin == 1) echo 'Jesteś administratorem';
else echo 'Nie masz wystarczających uprawnień';

W nowszych wersjach PHP opcja ta domyślnie jest wyłączona.

2. Wykonywanie poleceń systemowych

W przypadku PHP, zanim przystąpimy do pisania kodu, powinniśmy zwrócić uwagę na kilka punktów jego konfiguracji. Najbardziej newralgicznymi punktami są takie ustawienia, jak safe_mode, open_basedir i opcje z nimi związane.

Safe_mode (tryb bezpieczny) umożliwia dostęp do plików, których właścicielem jest właściciel wykonywanego skryptu, i określa dostęp do wybranych poleceń systemowych uruchamianych z poziomu PHP, a także zmiennych systemowych. Druga opcja – open_basedir – umożliwia nam założenie blokady na dostęp do zawartości folderów powyżej ustawionego. Zabezpieczy nas to przed próbami przejęcia krytycznych plików serwera (np. passwd).

W wypadku, gdy nasze skrypty muszą wykonywać polecenia takie jak exec, system, shell_exec czy passthru, należy starannie zweryfikować, jakie dane dołączane są do wykonywanych poleceń. W przeciwnym razie nasz serwer może zostać poważnie narażony na atak typu shell injection.

$arg = $_GET[ 'arguments' ]; // ' | rm ?r *'
passthru( 'vip_script ' . $arg );

By się bronić, oprócz wyrażeń regularnych do dyspozycji mamy dwie funkcje: escapeshellcmd oraz escapeshellarg, które zajmują się czyszczeniem przekazywanych poleceń.

Czytelność kodu

W systemach niekrytycznych (czyli takich, w których optymalne wykorzystanie mocy obliczeniowej procesora nie jest sprawą najważniejszą) jednym z głównych kryteriów oceny pracy programisty jest czytelność tworzonego przez niego kodu źródłowego. Przy takich kryteriach pożytek nawet z dobrze działającego programu staje się niewielki, gdy jego kod pozostaje całkowicie niezrozumiały dla osób postronnych. Podczas pisania programu dobrze jest więc wyodrębniać fragmenty kodu źródłowego, tworząc w ten sposób niezależne funkcje, czy też deklarować dodatkowe zmienne, nawet jeśli miałyby być wywołane tylko raz w całym programie – wszystko po to, by zwiększyć jego czytelność. Na czytelność kodu źródłowego ma także wpływ zastosowanie w nim odpowiednich wcięć, dodatkowych białych znaków (spacji i tabulatorów) oraz logiczność jego kompozycji.

«poprzednia 1 2 3 4 następna »

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

Komentarze

Uwaga! Możesz zarejestrować się w serwisie i w ten sposób zarezerwować swój nick oraz ominąć konieczność ciągłego odczytywania wyrazów.

Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka (słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł