LISTA KONTROLNA BEZPIECZEŃSTWA BACKENDU (zadanie 32; na podstawie listy z zadania 14) — zaznacz [x] i wpisz plik/linię

[ ] 1. Każde zapytanie z danymi od użytkownika używa prepare/execute (PDO) — brak sklejania SQL z $_GET/$_POST
[ ] 2. Każda wartość wypisywana w HTML przechodzi przez htmlspecialchars (funkcja e())
[ ] 3. Każdy formularz POST ma ukryty token CSRF sprawdzany po stronie serwera (hash_equals)
[ ] 4. Operacje zmieniające dane tylko metodą POST (usuwanie nie przez link GET)
[ ] 5. Hasła: password_hash / password_verify; min. długość hasła przy rejestracji
[ ] 6. session_regenerate_id(true) po zalogowaniu; wylogowanie niszczy sesję
[ ] 7. Ciasteczko sesji: HttpOnly, SameSite=Lax (Secure na HTTPS)
[ ] 8. Każda strona panelu sprawdza rolę na serwerze (nie tylko ukryty przycisk w menu)
[ ] 9. Użytkownik może zmieniać tylko SWOJE rekordy (warunek uzytkownik_id = id z sesji)
[ ] 10. Walidacja danych po stronie serwera (typy, długości, zakresy dat, wartości z listy dozwolonych)
[ ] 11. Błędy: display_errors Off w produkcji, komunikat ogólny dla użytkownika, szczegóły w logu
[ ] 12. Dane dostępowe do bazy poza kodem (.env), .env w .gitignore, konto bazy bez uprawnień DROP/GRANT
[ ] 13. Nagłówki: X-Content-Type-Options: nosniff, Content-Security-Policy (przynajmniej default-src 'self' + CDN), Referrer-Policy
[ ] 14. Odpowiedzi API: Content-Type: application/json, właściwe kody (200, 201, 400, 401, 403, 404, 409, 422)
