Asosiy matnga o'tish
Blog

Veb

Xavfsizlik headerlari: CSP, HSTS va boshqalar — skanerlarda A+ ga qanday chiqish

Qaysi HTTP xavfsizlik headerlari kerak, har biri nimadan himoya qiladi va nginx'da ularni qanday to'g'ri qo'shish mumkin — tayyor konfiguratsiya bilan.

· 7 daq. o'qish

Foto: Estormiz, CC0 · Wikimedia Commons

Xavfsizlik headerlari — server har bir javob bilan brauzerga yuboradigan qo'shimcha ko'rsatmalar. Ular brauzerga sahifani qanday himoyalashni aytadi: faqat HTTPS orqali ochish, begona skriptlarni bajarmaslik, sahifani boshqa saytga ramka ichida joylashtirmaslik va hokazo.

Headerlar yo'qligi kiberxavfsizlik ekspertizasida va ochiq skanerlarda (masalan, securityheaders.com yoki Mozilla Observatory) eng tez ko'rinadigan kamchiliklardan biri. Yaxshi tomoni — ularni qo'shish odatda bir necha qator konfiguratsiya.

Asosiy headerlar va ularning vazifasi

Strict-Transport-Security (HSTS)

Brauzerga ushbu domenni belgilangan muddat davomida faqat HTTPS orqali ochishni buyuradi. Bu foydalanuvchi http:// bilan kirganda ham shifrlanmagan so'rov yuborilmasligini ta'minlaydi.

Strict-Transport-Security: max-age=31536000; includeSubDomains

includeSubDomains qo'shishdan oldin barcha subdomenlar HTTPS'da ishlashiga ishonch hosil qiling. preload direktivasini esa oqibatlarini tushungandan keyingina qo'shing: preload ro'yxatidan chiqish vaqt oladi.

Content-Security-Policy (CSP)

Eng kuchli va eng murakkab header. U sahifa qaysi manbalardan skript, stil, rasm, shrift yuklashi va qayerga so'rov yuborishi mumkinligini belgilaydi. To'g'ri sozlangan CSP XSS zaifliklarining ta'sirini sezilarli kamaytiradi.

Boshlang'ich qat'iy siyosat:

default-src 'self'; script-src 'self'; style-src 'self';
img-src 'self' data:; font-src 'self'; connect-src 'self';
object-src 'none'; base-uri 'self'; frame-ancestors 'self';
form-action 'self'

Muhim jihatlar:

  • 'unsafe-inline' va 'unsafe-eval' dan qoching — ular CSP himoyasining katta qismini bekor qiladi. Inline skript kerak bo'lsa, nonce yoki hash ishlating.
  • Tashqi xizmatlarni (analitika, to'lov vidjeti, xarita) aniq domen bilan qo'shing, * bilan emas.
  • frame-ancestors clickjacking'dan himoya qiladi va zamonaviy brauzerlarda X-Frame-Options o'rnini bosadi.

X-Content-Type-Options

X-Content-Type-Options: nosniff

Brauzerga fayl turini "taxmin qilmaslik"ni aytadi. Masalan, yuklangan matn fayli skript sifatida bajarilmaydi.

X-Frame-Options

X-Frame-Options: SAMEORIGIN

Sahifani boshqa saytlarda <iframe> ichida ochishni taqiqlaydi. CSP'dagi frame-ancestors bilan birga eski brauzerlar uchun qo'shib qo'yish foydali.

Referrer-Policy

Referrer-Policy: strict-origin-when-cross-origin

Boshqa saytga o'tilganda to'liq URL (ichidagi parametrlar, tokenlar) emas, faqat domen yuborilishini ta'minlaydi.

Permissions-Policy

Permissions-Policy: camera=(), microphone=(), geolocation=()

Sayt ishlatmaydigan brauzer imkoniyatlarini o'chiradi. Hatto sahifaga begona kod tushsa ham, u kamera yoki geolokatsiyaga murojaat qila olmaydi.

Server versiyasini yashirish

nginx standart holatda Server headerida va xato sahifalarida versiyasini ko'rsatadi. Bu ma'lumot oshkor bo'lishining kichik, lekin ekspertizada qayd etiladigan turi. server_tokens off; buni yopadi.

Eslatma: X-XSS-Protection eskirgan header. Zamonaviy brauzerlar uni qo'llamaydi; uni qo'shish shart emas, himoyani CSP beradi.

nginx konfiguratsiyasi

Quyidagi blokni server { ... } ichiga (HTTPS qismiga) qo'shing:

server_tokens off;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

always parametri headerlar xato javoblarida (404, 500) ham yuborilishini ta'minlaydi.

Ko'p uchraydigan tuzoq: add_header merosi

nginx'da add_header direktivalari ichki blokka faqat o'sha blokda bitta ham add_header bo'lmasa meros qilib o'tadi. Agar location /assets/ { add_header Cache-Control ...; } yozsangiz, shu location dagi javoblarda barcha xavfsizlik headerlari yo'qoladi.

Yechim: headerlarni alohida faylga chiqarib, kerakli joylarda qayta ulash.

# /etc/nginx/snippets/security-headers.conf ichida yuqoridagi add_header qatorlari

server {
    include snippets/security-headers.conf;

    location /assets/ {
        include snippets/security-headers.conf;
        add_header Cache-Control "public, max-age=31536000, immutable";
    }
}

CSP'ni xavfsiz joriy qilish

Mavjud saytga birdaniga qat'iy CSP qo'yish ba'zi funksiyalarni buzishi mumkin. Shuning uchun bosqichma-bosqich harakat qiling:

  1. Avval Content-Security-Policy-Report-Only headeri bilan siyosatni yoqing — brauzer hech narsani bloklamaydi, faqat buzilishlarni konsolga (yoki report-uri manziliga) yozadi.
  2. Bir necha kun davomida buzilishlarni yig'ing va har birini tahlil qiling: bu haqiqiy kerakli manba yoki keraksiz/begona kodmi?
  3. Inline skript va stillarni alohida fayllarga chiqaring yoki nonce qo'shing.
  4. Siyosat toza bo'lgach, header nomini Content-Security-Policy ga almashtiring.

Natijani tekshirish

Brauzerda yoki terminalda headerlarni ko'ring:

curl -sI https://your-domain.uz | grep -iE "strict|content-security|x-content|x-frame|referrer|permissions|server"

So'ngra saytni securityheaders.com va Mozilla Observatory'da tekshiring. Skanerlar baholash mezonlarini o'zgartirib turadi, lekin odatda yuqori baho uchun HSTS va 'unsafe-inline' siz CSP hal qiluvchi ahamiyatga ega.

Bir narsani yodda tuting: skanerdagi A+ — bu headerlar to'g'ri sozlanganini bildiradi, xolos. U ilovada biznes mantiq yoki kirish nazorati xatolari yo'qligini ko'rsatmaydi. Headerlar himoyaning bitta qatlami.

Xulosa

Xavfsizlik headerlari — kam mehnat talab qiladigan, lekin aniq foyda beradigan sozlama. HSTS, CSP, nosniff, Referrer-Policy, Permissions-Policy va server_tokens off ni qo'shing, add_header merosini hisobga oling va CSP'ni avval report-only rejimida sinang.

Saytingiz headerlari va boshqa sozlamalarini tekshirtirmoqchimisiz? Skanerlash uchun so'rov qoldiring — Claude AI agenti va mutaxassisimiz konfiguratsiyani ko'rib chiqib, nimani tuzatish kerakligini ko'rsatamiz.