Πολιτικές ασφάλειας και CSP
1) Γιατί χρειαζόμαστε πολιτικές ασφάλειας
Το σύγχρονο μέτωπο και το API εξαρτώνται από πολλές πηγές (CDN, analytics, PSP, 3DS, chats). Χωρίς σκληρές πολιτικές, οι κίνδυνοι από XSS, clickjacking, διαρροές δεδομένων και πειρατεία συνεδρίας αυξάνονται. Οι πολιτικές ασφαλείας περιορίζουν αυτό που επιτρέπεται εξ ορισμού μετακινώντας τον φυλλομετρητή στο μοντέλο επιτρεπόμενης λίστας.
2) Βασικοί πυλώνες
Το CSP (Content Security Policy) είναι ένα συγκεντρωτικό «μενού» επιτρεπόμενων πηγών και συμπεριφορών JS/CSS/μέσων ενημέρωσης.
Τύποι εμπίστευσης - Προστασία σε επίπεδο τύπου από DOM-XSS.
SRI (Subresource Integrity) - έλεγχος της ακεραιότητας των σεναρίων/στυλ.
COOP/COEP/CORP - άκαμπτη απομόνωση των πλαισίων και των πόρων μεταξύ των πηγών.
Το Fetch Metadata ('Sec-Fetch-') είναι μια λύση διακομιστή για το φιλτράρισμα cross-site αιτήσεων.
CORS - διατομεακή πολιτική πρόσβασης API.
Κλασικοί τίτλοι: HSTS, 'X-Frame-Option /' frame-ancestors', 'Referrer-Policy', 'Permissions-Policy', SamiSite-cookies.
3) CSP: Βάση και αρχές
3. 1 Οδηγίες (κλειδί)
«default-src» - εξ ορισμού για άλλες οδηγίες.
'script-src' - πηγές JS, nonce/hash, 'strict-dynamic', 'report-sample'.
«style-src» - πηγές CSS, ελαχιστοποίηση 'unsafe-inline'.
'img-src', 'font-src', 'media-src', 'object-src' (обычно 'no').
'connect-src' - αιτήσεις δικτύου (XHR/fetch/WebSocket).
«frame-src »/« child-src» - πλαίσια τρίτων (PSP, 3DS).
«frame-πρόγονοι» - που μπορούν να ενσωματώσουν την ιστοσελίδα μας (anti-clickjacking).
«base-uri» - απαγόρευση της υποκατάστασης του «<base>».
«Ομοίωση» - όπου επιτρέπεται η υποβολή εντύπων.
«αναβάθμιση-επισφαλή αιτήματα», «μπλοκ-όλα-μεικτό-περιεχόμενο» - καταπολέμηση του μείγματος HTTP/HTTPS.
«report-uri »/« report-to» - πού να στείλετε παραβιάσεις.
3. 2 Nonce и hash
Nonce προσέγγιση: δημιουργήστε ένα crypto-random 'nonce' για κάθε απάντηση HTTP, προσθέστε '<script nonce =...' «> 'σε inline scripts και' script-src 'nonce-»..
Προσέγγιση Hash: σταθερό hash του περιεχομένου inline. Κατάλληλο για στατική HTML, άβολο για δυναμική.
'strict-dynamic': εμπιστοσύνη μόνο σενάρια που φορτώνονται από ένα «αξιόπιστο» σενάριο (με nonce/hash). Αφαιρεί την ανάγκη για λίστα τομέων-στόχων κατά τη διάρκεια της δυναμικής εκκίνησης, αλλά απαιτεί σύγχρονους περιηγητές.
3. Απαγόρευση «μη ασφαλούς»
Αποφύγετε το «μη ασφαλές», το «μη ασφαλές». Αν το πλαίσιο απαιτεί eval (για παράδειγμα, source-map in dev), συμπεριλαμβάνεται μόνο στο dev.
Για στυλ - χρήση 'nonce' ή 'hash', αν είναι δυνατόν χωρίς inlines.
3. 4 Παράδειγμα αυστηρού CSP (σημείο μάχης)
Content-Security-Policy:
default-src 'none';
base-uri 'self';
object-src 'none';
script-src 'self' 'nonce-{RANDOM}' 'strict-dynamic' https://www. googletagmanager. com;
style-src 'self' 'nonce-{RANDOM}';
img-src 'self' data: https://images. example-cdn. com;
font-src 'self' https://fonts. gstatic. com;
connect-src 'self' https://api. example. com wss://ws. example. com;
frame-src https://3ds. psp. com https://pay. psp. com;
frame-ancestors 'none';
form-action 'self' https://pay. psp. com;
upgrade-insecure-requests;
report-to csp-endpoint; report-sample
4) Τύποι εμπίστευσης (DOM-XSS)
Ενεργοποίηση της οδηγίας: "Content-Security-Policy: request-trust-type-for 'script', προεπιλογή εφαρμογής εμπίστευσης τύπων '.
Δημιουργία ενιαίας πολιτικής στον κώδικα ('παράθυρο. Τύποι trustedTypes. CreedPolicy ('app', {creedHTML () {...}}).
Απαγόρευση ανασφαλών εκχωρήσεων ("στοιχείο. innHTML =... ') без τύπους εμπίστευσης.
Ολοκλήρωση πλαισίου (αντίδραση/γωνιακή/Vue): χρήση API ασφαλούς απόδοσης, αποφυγή επικίνδυνων κινδύνων "SetInnerHTML.
5) SRI (Ακεραιότητα CDN)
Για εξωτερικά' <script> '/' <link>', χρησιμοποιήστε 'ακεραιότητα =" sha256-... «crossorigin =» anonymous «».
Συμπληρώματα SRI, που δεν αντικαθιστούν, CSP. Κατά την αναβάθμιση μιας έκδοσης CDN, ενημερώστε το hash.
6) Κλίκτζακ και πλαίσια
Ο σύγχρονος τρόπος είναι οι «πρόγονοι-πλαίσιο» (αντικαθιστά τις ξεπερασμένες «επιλογές-πλαίσιο-πλαίσιο»).