<?> PHP NOVA invictum.hr
Izdanje 2026.
Poglavlje 31

Sigurnost PHP aplikacije

Sigurnost pretvaramo iz završne provjere u skup svakodnevnih odluka: granice povjerenja, najmanje privilegije, sigurne zadane postavke i nadzor.

34 min čitanja Napredno razina PHP 8.5 ciljna verzija

Nakon ovog poglavlja

Što ćete znati napraviti

  • Povezati najčešće web ranjivosti s konkretnom obranom.
  • Primijeniti sigurnosna zaglavlja i upravljanje tajnama.
  • Uvesti jednostavan model prijetnji prije implementacije.

Jedan problem, jedna obrana

Validacija nije zamjena za encoding ni parametre

SQL injection sprječavamo parametriziranim upitima. XSS sprječavamo encodingom na izlazu i, gdje treba, sanitizacijom dopuštenog HTML-a. CSRF sprječavamo tokenom i sigurnim kolačićima. Broken access control sprječavamo provjerom prava nad konkretnim resursom.

Path traversal, SSRF i command injection traže stroge allowliste i izbjegavanje prosljeđivanja korisničkog unosa datotečnom sustavu, mreži ili shellu. Jedan univerzalni „sanitize“ ne postoji.

  • Ulaz validirajte prema poslovnom pravilu.
  • SQL vrijednosti vežite parametrima.
  • HTML izlaz kodirajte prema kontekstu.
  • Svaku zaštićenu radnju autorizirajte na serveru.
  • Promjene zaštitite od CSRF-a.

Obrana preglednika

HTTPS i sigurnosna zaglavlja

HTTPS štiti povjerljivost i cjelovitost prometa. HSTS se uključuje tek kada cijela domena pouzdano radi na HTTPS-u. Content-Security-Policy ograničava izvore skripti i može znatno smanjiti posljedice XSS-a, ali treba je postupno testirati.

Početni skup zaglavlja
Content-Security-Policy: default-src 'self'; img-src 'self' https: data:; object-src 'none'; base-uri 'self'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()

Plan prije incidenta

Što štitimo, od koga i gdje može puknuti

Tajne ne pripadaju kodu, repozitoriju, slici zaslona ni logu. Učitavaju se iz varijabli okruženja ili upravljanog spremišta te rotiraju kada procure. Razvoj i produkcija koriste različite vjerodajnice.

Za svaku novu funkciju zapišite imovinu, aktere, ulazne točke, granice povjerenja, zloupotrebe i obrane. Razmislite o brisanju, izvozu, automatiziranom prometu, prevelikim zahtjevima i curenju kroz pogreške.

Mali model prijetnji
Imovina: privatne bilješke
Akteri: vlasnik, administrator, napadač
Ulazi: forma, API, upload
Prijetnja: korisnik mijenja tuđi ID u URL-u
Obrana: upit po id + user_id, test zabrane pristupa

Primijenite naučeno

Vježba: Pregled CRUD aplikacije

Napravite sigurnosni pregled svega što ste dosad izgradili.

  1. Za svaku rutu označite autentikaciju, autorizaciju i CSRF.
  2. Provjerite svaki SQL i svaki ispis korisničkog podatka.
  3. Dodajte ograničenja veličine, brzine i sigurne produkcijske pogreške.

Za provjeru i nastavak

Službeni izvori