PUNKT KONTROLNY 06
Bezpieczeństwo aplikacji i wzorce egzaminacyjne INF.03: ochrona przed XSS, zapytania przygotowane i arkusze CKE
Części 16–18 to most łączący podstawy programowania w PHP ze standardami bezpieczeństwa oraz realnymi wymaganiami klucza oceniania egzaminu zawodowego INF.03. Zanim przejdziesz do biblioteki PDO oraz programowania obiektowego (Części 19–21), upewnij się, że potrafisz bezbłędnie zabezpieczyć aplikację przed atakami XSS i SQL Injection oraz płynnie realizujesz schematy zadań egzaminacyjnych.
Zakres sprawdzianu
- Ochrona przed XSS (Część 16): reguła Output Encoding, funkcja
htmlspecialchars()z flagąENT_QUOTES,bezpieczne formatowanie tekstu wielowierszowegonl2br(htmlspecialchars())oraz pułapka pseudo-protokołujavascript:w atrybutachhref. - Bezpieczeństwo bazy danych i zapytania przygotowane (Część 17): mechanizm działania
mysqli_prepare(),wiązanie parametrów przezmysqli_stmt_bind_param()(typys,i,d), wyszukiwanieLIKEz doklejaniem znaków%w PHP oraz biała lista (in_array()) dla nazw kolumn wORDER BY. - Wzorce egzaminacyjne INF.03 (Część 18): dynamiczne listy rozwijane
<select>powiązane z bazą, agregacja i sumowanie wartości w pętliwhilew PHP, obsługa pustych wyników (mysqli_num_rows() === 0) oraz higiena połączenia (kodowanieutf8mb4imysqli_close()).
Quiz diagnostyczny — sprawdź swoją pewność
Zaznacz odpowiedzi i kliknij przycisk na dole. Błędne odpowiedzi wskażą Ci dokładnie te ćwiczenia, które warto powtórzyć.
htmlspecialchars() dopiero w momencie wyświetlania w dokumencie HTML, a NIE przed zapisem poleceniem INSERT do bazy danych?
<input name="login" value="<?= htmlspecialchars($login, ENT_QUOTES) ?>">. Za co odpowiada flaga ENT_QUOTES?
textarea. Dlaczego zapis echo nl2br(htmlspecialchars($tekst)); jest poprawny, a kolejność odwrotna: echo htmlspecialchars(nl2br($tekst)); jest błędem?
<a href="<?= htmlspecialchars($url) ?>">Strona</a>. Dlaczego sam htmlspecialchars() NIE chroni w pełni przed atakiem XSS w tym miejscu?
mysqli_stmt_bind_param($stmt, "sid", $nazwa, $ilosc, $cena);. Co oznaczają poszczególne litery i jaki błąd nastąpi, gdy dla ceny użyjemy typu "i" zamiast "d"?
$szukaj. W jaki sposób należy poprawnie przygotować zapytanie z klauzulą LIKE i parametrem ??
ORDER BY). Dlaczego nazwy kolumny NIE wolno przekazać jako parametru ? w mysqli_prepare i jak należy to zabezpieczyć?
while ($w = mysqli_fetch_assoc($res)) { echo "<option value='{$w['id']}'>" . htmlspecialchars($w['nazwa']) . "</option>"; }Jaka wartość trafi do tablicy
$_POST po wysłaniu formularza?
Matryca powtórek
Jeśli po kliknięciu sprawdzenia któreś pytanie zaznaczyło się na czerwono, poniższa tabela wskazuje dokładne ćwiczenie, które pozwoli Ci to przećwiczyć w praktyce:
| Pytania | Obszar wiedzy | Rekomendowane ćwiczenie |
|---|---|---|
| Pytania 1–2 | Zasada Output Encoding w htmlspecialchars oraz flaga ENT_QUOTES w atrybutach HTML | m16-1 (Pierwszy htmlspecialchars) oraz m16-7 (Atrybut value i ENT_QUOTES) |
| Pytania 3–4 | Kolejność funkcji nl2br z htmlspecialchars oraz blokada ataku przez linki href | m16-10 (Kolejność nl2br i encji) oraz m16-11 (Weryfikacja linku w href) |
| Pytania 5–6 | Oddzielenie struktury zapytania od danych w mysqli_prepare oraz typy wiązania (sid) | m17-1 (Pierwsze zapytanie przygotowane) oraz m17-4 (Parametr zmiennoprzecinkowy typ d) |
| Pytania 7–8 | Wzorzec LIKE ze znakiem % w zmiennej PHP oraz biała lista dla kolumn w ORDER BY | m17-7 (Wyszukiwanie LIKE z parametrem) oraz m17-13 (Biała lista dla nazw kolumn) |
| Pytania 9–10 | Generowanie listy select z bazy z atrybutem value oraz sumowanie w pętli while w PHP | m18-1 (Dynamiczna lista rozwijana select) oraz m18-3 (Tabela z obliczeniem wartości brutto) |
| Pytania 11–12 | Obsługa braku rekordów (mysqli_num_rows === 0) oraz higiena połączenia (kodowanie i close) | m18-6 (Obsługa pustego wyniku zapytania) oraz m18-16 (Kompletny moduł egzaminacyjny synteza) |