Dlaczego bezpieczeństwo jest kluczowe?
Brak ochrony kodu prowadzi do wycieków danych, ataków i problemów z zaliczeniem INF.03. Na egzaminie praktycznym musisz stosować bezpieczne praktyki – w szkole i w realnych projektach!
Prepared statements – jak działa bezpieczne zapytanie?
Przykład PHP/MySQLi:
$stmt = $mysqli->prepare("SELECT * FROM uzytkownicy WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
Prepared statements uniemożliwiają ataki typu SQL Injection (dodanie złośliwego kodu przez użytkownika).
Walidacja i filtrowanie danych wejściowych
- Stosuj funkcje filter_var() do e-maila, adresu, liczb
- Usuń lub zamień potencjalnie groźne znaki (np.
htmlspecialchars()w formularzach) - Sprawdzaj długość, typ i format danych zanim wpiszesz do bazy
Atak SQL Injection – jak go wykryć?
Zły przykład:
$sql = "SELECT * FROM uzytkownicy WHERE email = '$email'";
Jeśli ktoś wpisze w pole e-mail: ' OR 1=1 -- otrzyma dostęp do wszystkich rekordów!
Nigdy nie korzystaj z zapytań złożonych z niezabezpieczonych danych użytkownika.
Ochrona przed XSS (Cross Site Scripting)
- Filtrowanie wszystkich danych wyświetlanych na stronie — zamieniaj znaki specjalne (
<, >, &itd) - Waliduj komunikaty, nicki, komentarze oraz dowolny tekst od użytkownika
- Używaj
htmlspecialchars()do wyświetlania zawartości z bazy
Pamiętaj: lepiej wyświetlić tekst bez formatowania niż umożliwić atak na stronę!
Bezpieczne sesje i logowanie użytkownika
- Używaj
session_start()zawsze na górze pliku - Przechowuj jak najmniej danych w sesji, nie “hasło”!
- Regeneruj identyfikator sesji po zalogowaniu
session_regenerate_id() - Ustal limit ważności sesji (np. 30 minut nieaktywności)
Podsumowanie dobrych praktyk
- Koduj zawsze podejrzliwie – bierz pod uwagę atakującego
- Testuj swoje rozwiązania na dane “kreatywne” (np. dziwne znaki, duże liczby, puste pole)
- Twórz backupy bazy – regularnie, automatycznie
- Czytaj komunikaty błędów, nie wyświetlaj ich użytkownikowi (“Wewnętrzny błąd”, “brak dostępu” – OK, ale nie “Kod: 1049”)
Zadania egzaminacyjne INF.03 wymagają bezpiecznego kodu! Pamiętaj: prepared statements, walidacja, XSS — to podstawa każdego projektu webowego.