W budowie
Punkt kontrolny · Diagnostyka Sprawdź opanowanie bezpieczeństwa aplikacji webowej i wzorców egzaminacyjnych przed wejściem w PDO

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 wielowierszowego nl2br(htmlspecialchars()) oraz pułapka pseudo-protokołu javascript: w atrybutach href.
  • Bezpieczeństwo bazy danych i zapytania przygotowane (Część 17): mechanizm działania mysqli_prepare(), wiązanie parametrów przez mysqli_stmt_bind_param() (typy s, i, d), wyszukiwanie LIKE z doklejaniem znaków % w PHP oraz biała lista (in_array()) dla nazw kolumn w ORDER BY.
  • Wzorce egzaminacyjne INF.03 (Część 18): dynamiczne listy rozwijane <select> powiązane z bazą, agregacja i sumowanie wartości w pętli while w PHP, obsługa pustych wyników (mysqli_num_rows() === 0) oraz higiena połączenia (kodowanie utf8mb4 i mysqli_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ć.

1. Dlaczego wartości wprowadzane przez użytkownika zabezpiecza się funkcją htmlspecialchars() dopiero w momencie wyświetlania w dokumencie HTML, a NIE przed zapisem poleceniem INSERT do bazy danych?
2. W formularzu edycji profilu wartość pola wygenerowano następująco: <input name="login" value="<?= htmlspecialchars($login, ENT_QUOTES) ?>">. Za co odpowiada flaga ENT_QUOTES?
3. Wyświetlasz opinię klienta pobraną z wielowierszowego pola textarea. Dlaczego zapis echo nl2br(htmlspecialchars($tekst)); jest poprawny, a kolejność odwrotna: echo htmlspecialchars(nl2br($tekst)); jest błędem?
4. W profilu użytkownika wyświetlono link do jego strony www: <a href="<?= htmlspecialchars($url) ?>">Strona</a>. Dlaczego sam htmlspecialchars() NIE chroni w pełni przed atakiem XSS w tym miejscu?
5. Dlaczego zapytania przygotowane (Prepared Statements) całkowicie uniemożliwiają atak SQL Injection, w przeciwieństwie do zwykłego sklejania tekstu zapytania operatorem kropki?
6. W skrypcie powiązano parametry zapytania: 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"?
7. Chcesz wyszukać w bazie towary, których nazwa zawiera frazę ze zmiennej $szukaj. W jaki sposób należy poprawnie przygotować zapytanie z klauzulą LIKE i parametrem ??
8. Użytkownik wybiera z listy kolumnę, według której mają zostać posortowane wyniki (ORDER BY). Dlaczego nazwy kolumny NIE wolno przekazać jako parametru ? w mysqli_prepare i jak należy to zabezpieczyć?
9. W arkuszu wygenerowano listę rozwijaną:
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?
10. W pętli odczytującej zamówienia należy zsumować łączną kwotę brutto pozycji (cena netto * ilość * 1.23). W którym miejscu i jak należy poprawnie zainicjalizować oraz sumować tę wartość?
11. Zapytanie filtrujące nie odnalazło w bazie żadnych rekordów spełniających kryteria wybrane przez użytkownika. Jak należy poprawnie obsłużyć tę sytuację zgodnie z wymaganiami arkuszy INF.03?
12. Za które operacje techniczne związane z obsługą bazy danych w skrypcie PHP egzaminator INF.03 niemal zawsze przyznaje punkty w kluczu odpowiedzi CKE?

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:

PytaniaObszar wiedzyRekomendowane ćwiczenie
Pytania 1–2Zasada Output Encoding w htmlspecialchars oraz flaga ENT_QUOTES w atrybutach HTMLm16-1 (Pierwszy htmlspecialchars) oraz m16-7 (Atrybut value i ENT_QUOTES)
Pytania 3–4Kolejność funkcji nl2br z htmlspecialchars oraz blokada ataku przez linki hrefm16-10 (Kolejność nl2br i encji) oraz m16-11 (Weryfikacja linku w href)
Pytania 5–6Oddzielenie 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–8Wzorzec LIKE ze znakiem % w zmiennej PHP oraz biała lista dla kolumn w ORDER BYm17-7 (Wyszukiwanie LIKE z parametrem) oraz m17-13 (Biała lista dla nazw kolumn)
Pytania 9–10Generowanie listy select z bazy z atrybutem value oraz sumowanie w pętli while w PHPm18-1 (Dynamiczna lista rozwijana select) oraz m18-3 (Tabela z obliczeniem wartości brutto)
Pytania 11–12Obsł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)