Ασφάλεια & TLS

CSP — Content Security Policy

HTTP header που περιορίζει ποιες πηγές μπορεί να φορτώσει μια σελίδα (μέτρο κατά XSS).

Τι είναι το CSP

Το CSP (Content Security Policy) είναι ένα HTTP response header που λέει στον browser ποιες πηγές επιτρέπεται να φορτώνει η σελίδα σου: scripts, στυλ, εικόνες, fonts, frames κλπ. Είναι το πιο ισχυρό browser-level μέτρο κατά XSS (cross-site scripting) και κατά data exfiltration.

Χωρίς CSP, μια ευπάθεια XSS μπορεί να φορτώσει malicious JavaScript από οποιοδήποτε domain του Διαδικτύου. Με CSP, ακόμη κι αν περάσει η ευπάθεια, ο browser αρνείται να εκτελέσει τον κώδικα γιατί δεν προέρχεται από εγκεκριμένη πηγή.

Βασικές directives

  • default-src — fallback για όλους τους τύπους πόρων
  • script-src — από πού επιτρέπεται JavaScript
  • style-src — από πού επιτρέπεται CSS
  • img-src — εικόνες
  • connect-src — XHR, fetch, WebSocket
  • font-src — fonts
  • frame-src — iframes
  • report-uri — που να στέλνει αναφορές παραβιάσεων

Παράδειγμα CSP header

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; font-src 'self' https://fonts.gstatic.com; report-uri /csp-report

Σημαίνει:

  • Εξ ορισμού, όλα τα assets πρέπει να έρχονται από το ίδιο domain
  • Scripts: επιτρέπεται και το cdn.example.com
  • Εικόνες: από οπουδήποτε με HTTPS και data URIs
  • CSS: από ίδιο domain και inline styles (μη ιδανικό)
  • Fonts: από Google Fonts
  • Αναφορές παραβιάσεων σε /csp-report

Strict CSP — η σύγχρονη προσέγγιση

Σήμερα συνιστάται «strict CSP» που χρησιμοποιεί nonce ή hash για να εγκρίνει συγκεκριμένα inline scripts, αντί για allowlist domains:

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

Κάθε inline <script> tag πρέπει να έχει nonce="r4nd0m" (που γενιέται φρέσκο σε κάθε request). Επιτιθέμενοι δεν μπορούν να μαντέψουν το nonce, οπότε injection μπλοκάρεται.

Roll-out σε βήματα

  1. Ξεκίνα με Content-Security-Policy-Report-Only — μόνο αναφορές, δε μπλοκάρει.
  2. Συλλέγεις αναφορές, βλέπεις τι «θα έσπαζε».
  3. Διορθώνεις legitimate πηγές που λείπουν.
  4. Μετά από 1-2 εβδομάδες, ενεργοποιείς το πλήρες Content-Security-Policy.

Σχετικοί όροι