📧 [email protected] 📞 +381 61 161 2299
Security Headers

Content Security Policy: Kako pravilno napisati CSP koji zaista štiti

2026-07-26 · Shieldome Scout

CSP je najmoćnija odbrana od XSS napada, ali je i najkompleksnija za implementaciju. Pogrešna konfiguracija ili ne radi ništa, ili blokira legitimne resurse vašeg sajta. Evo kako to uraditi pravo.

← Blog

Kako CSP funkcioniše

CSP (Content Security Policy) je whitelist-bazirani sistem: server definiše listu dozvojenih izvora za svaki tip resursa. Browser blokira sve što nije eksplicitno dozvoljeno. Ako napadač ubaci XSS script koji učitava kod sa evil.com, a evil.com nije na listi, browser neće izvršiti script.

Anatomija CSP direktiva

Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'nonce-abc123' https://cdn.jsdelivr.net;
  style-src 'self' 'unsafe-inline';
  img-src 'self' data: https:;
  font-src 'self' https://fonts.gstatic.com;
  connect-src 'self' https://api.vasafirma.rs;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

Ključne direktive

Zašto 'unsafe-inline' uništava CSP

'unsafe-inline' u script-src dozvoljava sve inline skripte — uključujući one koje je napadač ubacio. Ovo praktično poništava XSS zaštitu CSP-a. Nažalost, mnogi sajti moraju imati inline skripte zbog legacy koda ili analitike.

Rešenje: Nonces

Nonce (number used once) je nasumični token koji server generiše za svaki request i dodaje u CSP header i u svaki legitimni <script> tag:

# Server (Python/Flask):
import secrets
nonce = secrets.token_hex(16)
# CSP header:
script-src 'nonce-{nonce}'
# HTML:
<script nonce="{nonce}">...</script>

Browser izvršava samo skripte čiji nonce odgovara onom u headeru. Napadačev ubačeni script nema nonce i ne izvršava se.

Rešenje: Hashes

Ako imate statičke inline skripte, možete izračunati njihov SHA-256 hash i dodati ga u CSP:

script-src 'sha256-abc123...'

Browser izvršava samo onu skriptu čiji hash odgovara. Menjanje skripte zahteva ažuriranje hasha.

Strict-CSP pristup

Google preporučuje "Strict CSP" koji koristi nonces i 'strict-dynamic':

Content-Security-Policy:
  script-src 'nonce-{nonce}' 'strict-dynamic';
  object-src 'none';
  base-uri 'none'

'strict-dynamic' propagira poverenje nonce-tagged skripti na skripte koje one dinamički učitavaju — rešava problem sa JavaScript modulima koji sami ubrizgavaju skripte u DOM.

CSP Report-Only: Testiranje bez rizika

Pre aktivacije pravog CSP-a, koristite report-only mod koji loguje kršenja ali ne blokira ništa:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report

Analizirajte izveštaje nekoliko dana da identifikujete sve legitimne resurse koji bi bili blokirani.

Shieldome Scout detektuje prisustvo CSP headera, analizira da li sadrži nesigurne direktive poput 'unsafe-inline' bez nonce/hash mehanizma, i daje konkretne preporuke za poboljšanje.

Česte greške

Proverite bezbednost vašeg sajta

Profesionalna procena ranjivosti. OWASP Top 10, dark web monitoring, PDF izveštaj za 2–3 radna dana.

Zatražite procenu →