Wyjątki a testowanie penetracyjne

Założenie: Pokażemy, jak prawidłowo obsługiwać wyjątki w PHP, aby zabezpieczyć aplikację przed atakami związanymi z nieprawidłowym ich przetwarzaniem.

Krok po kroku:

  1. Krok 1: Prosty przykład wyjątku.
    
    try {
        $plik = fopen("plik_którego_nie_ma.txt", "r");
        if ($plik) {
            fclose($plik);
        }
    } catch (Exception $e) {
        echo "Wystąpił błąd: " . $e->getMessage();
    }
    				

    Ten kod próbuje otworzyć plik, który prawdopodobnie nie istnieje. Jeśli plik nie zostanie znaleziony, zostanie wygenerowany wyjątek, który zostanie przechwycony przez blok `catch`. `$e->getMessage()` wyświetla komunikat o błędzie.

  2. Krok 2: Różne typy wyjątków.
    
    try {
        // Kod, który może wygenerować różne wyjątki
        $dzielnik = 0;
        $wynik = 10 / $dzielnik; 
    } catch (DivisionByZeroError $e) {
        echo "Próba dzielenia przez zero!";
    } catch (Exception $e) {
        echo "Wystąpił inny błąd: " . $e->getMessage();
    }
    				

    Ten przykład pokazuje obsługę specyficznego wyjątku `DivisionByZeroError` oraz ogólnego wyjątku `Exception`. To pozwala na bardziej precyzyjne reagowanie na różne typy błędów.

  3. Krok 3: Rzuć własny wyjątek.
    
    class MyException extends Exception {}
    
    function sprawdzDane($dane) {
        if (empty($dane)) {
            throw new MyException("Dane są puste!");
        }
        // ... dalsza walidacja danych ...
    }
    
    try {
        sprawdzDane("");
    } catch (MyException $e) {
        echo "Błąd: " . $e->getMessage();
    }
    				

    Tutaj definiujemy własny typ wyjątku `MyException` i używamy go do zgłaszania błędu, gdy dane są puste. To pozwala na lepszą organizację i zarządzanie wyjątkami w aplikacji.

Ten przykład pokazuje podstawy obsługi wyjątków w PHP. Prawidłowe ich użycie jest kluczowe dla tworzenia bezpiecznych i stabilnych aplikacji. Zachęcamy do dalszego zgłębiania tematu!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *