Təhlükəsizlik Siyasəti və CSP
1) Niyə təhlükəsizlik siyasətinə ehtiyacınız var
Müasir frontend və API bir çox mənbədən (CDN, analitik, PSP, 3DS, söhbətlər) asılıdır. Sərt siyasətlər olmadan XSS, klikcekinq, məlumat sızması və seans oğurluğu riskləri artır. Təhlükəsizlik siyasəti, brauzeri «yalnız açıq şəkildə icazə verilir» (allow-list) modelinə çevirməklə, default olaraq icazə verilənləri məhdudlaşdırır.
2) Əsas sütunlar
CSP (Content Security Policy) - JS/CSS/media mənbələrinin və davranışlarının mərkəzləşdirilmiş «menyusu».
Trusted Types - tip səviyyəsində DOM-XSS-dən qorunma.
SRI (Subresource Integrity) - skriptlərin/stillərin bütövlüyünə nəzarət.
COOP/COEP/CORP - mənbələr arasında kontekstlərin və resursların sərt izolyasiyasıdır.
Fetch Metadata ('Sec-Fetch-') - saytın sorğularını filtrləşdirmək üçün server həlli.
CORS - API domenlərarası giriş siyasəti.
Klassik başlıqlar: HSTS, 'X-Frame-Options '/' frame-ancestors', 'Referrer-Policy', 'Permissions-Policy', SameSite-cookies.
3) CSP: əsas və prinsipləri
3. 1 Direktivlər (açar)
'default-src' - digər direktivlər üçün defolt.
'script-src' - JS, nonce/hash, 'strict-dynamic', 'report-sample' mənbələri.
'style-src' - CSS mənbələri; minimuma endirmək 'unsafe-inline'.
`img-src`, `font-src`, `media-src`, `object-src` (обычно `none`).
'connect-src' - şəbəkə sorğuları (XHR/fetch/WebSocket).
'frame-src '/' child-src' - üçüncü tərəf çərçivələri (PSP, 3DS).
'frame-ancestors' - kim bizim veb daxil edə bilər (anti-click).
'base-uri' - <base> '.
'form-action' - formaların pozulmasına icazə verilir.
'upgrade-insecure-requests', 'block-all-mixed-content' - HTTP/HTTPS qarışığı ilə mübarizə.
'report-uri '/' report-to' - pozuntuları hara göndərmək olar.
3. 2 Nonce и hash
Nonce-yanaşma: Hər bir HTTP cavabında kriptovalyutası 'nonce' yaratmaq, inline-skriptlərə '<script nonce = "...>' və 'script-src' nonce-... 'əlavə etmək.
Hash-yanaşma: Sabit hash daxili məzmun. Statik HTML üçün uyğundur, dinamik üçün əlverişsizdir.
'strict-dynamic': yalnız «etibarlı» skript (nonce/hash ilə) yüklənmiş skriptlərə etibar edin. Dinamik yükləmə zamanı hədəf domenləri sadalamaq ehtiyacını aradan qaldırır, lakin müasir brauzerləri tələb edir.
3. 3 qadağa 'unsafe-'
'unsafe-inline', 'unsafe-eval' çəkinin. Framework eval (məsələn, dev-də source-map) tələb edirsə, yalnız dev.
Stillər üçün - 'nonce' və ya 'hash' istifadə edin, mümkünsə, İnternet olmadan.
3. 4 Ciddi CSP nümunəsi (döyüş istinad)
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) Trusted Types (DOM-XSS)
'Content-Security-Policy: require-trusted-types-for' script 'direktivini daxil edin; trusted-types app default`.
Kod ('window. trustedTypes. createPolicy('app', { createHTML() {... } })`).
Təhlükəli təyinatları qadağan edin ('element. innerHTML =...`) без Trusted Types.
Frameworks ilə inteqrasiya (React/Angular/Vue): təhlükəsiz API render istifadə, təhlükəli dangerouslySetInnerHTML qaçın.
5) SRI (CDN bütövlüyü)
Xarici '<script> '/' <link>' integrity = "sha256-"... crossorigin = "anonymous 'istifadə edin.
SRI CSP əvəz deyil, tamamlayır. CDN versiyasını yenilədikdə - heşi yeniləyin.
6) Klikcekinq və çərçivələr
Müasir üsul 'frame-ancestors' (köhnəlmiş 'X-Frame-Options' əvəz edir).