Helmet — xavfsizlik headerlari

~10 daq · Express · Autentifikatsiya va Xavfsizlik

HTTP headerlar va xavfsizlik

Server javob yuborayotganda faqat ma'lumot emas — headerlar ham yuboradi. Ba'zi headerlar brauzerga "qanday xavfsizlik qoidalarini qo'llash kerak" deb aytadi.

Masalan, X-Frame-Options headeri — sahifangizni boshqa saytda <iframe> ichida ko'rsatishni taqiqlaydi. Bu clickjacking hujumidan himoya. Yoki Content-Security-Policy — sahifada qaysi manbalardan skript yuklanishi mumkinligini belgilaydi. XSS dan himoya.

Bu headerlarni qo'lda yozish mumkin, lekin ularning hammasi esda qolmaydi. Helmet — bir qator bilan eng muhim xavfsizlik headerlarini qo'shadi.

npm install helmet

Ishlatish

const helmet = require('helmet');

app.use(helmet());

Shu bir qator — 11 ta xavfsizlik headeri avtomatik qo'shiladi.


Helmet nima qo'shadi?

helmet() qo'shgandan keyin javobda quyidagi headerlar paydo bo'ladi:

X-Frame-Options: SAMEORIGIN — sahifangizni faqat bir xil sayt <iframe> da ko'rsata oladi. Boshqa saytlar ko'rsata olmaydi. Clickjacking hujumidan himoya.

X-Content-Type-Options: nosniff — brauzer fayl turini o'zi taxmin qilmaydi, server aytgan turni ishlatadi. MIME sniffing hujumidan himoya.

Strict-Transport-Security — brauzerga "bu saytga faqat HTTPS orqali kir" deydi. Bir marta HTTPS orqali kirilgandan keyin — brauzer HTTP ga o'tishga yo'l qo'ymaydi.

X-XSS-Protection — eski brauzerlarda XSS filtrini yoqadi.

Referrer-Policy — boshqa saytga o'tganda qancha ma'lumot yuborilishini boshqaradi.


Sozlash

Ba'zan standart sozlamalar mos kelmaydi. Masalan, Content-Security-Policy ba'zi CDN larni bloklashi mumkin:

app.use(helmet({
  contentSecurityPolicy: false, // o'chirish
}));

// yoki aniq sozlash:
app.use(helmet({
  contentSecurityPolicy: {
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc:  ["'self'", 'cdn.jsdelivr.net'],
      imgSrc:     ["'self'", 'data:', '*.cloudinary.com'],
    },
  },
}));

Tez-tez uchraydigan xatolar

Helmet ni route lardan keyin qo'yish:

app.get('/api/users', handler);
app.use(helmet()); // kech — yuqoridagi route da headerlar yo'q

Helmet barcha middleware lardan oldin qo'yiladi.

Content-Security-Policy ni o'chirish:

app.use(helmet({ contentSecurityPolicy: false }));

Bu XSS himoyasini zaiflashtiradi. O'chirish o'rniga aniq sozlash yaxshiroq.


Xulosa

Helmet — bir qator bilan 11 ta xavfsizlik headeri. Har bir header ma'lum hujum turidan himoya qiladi.

app.use(helmet()) — barcha route lardan oldin. Standart sozlamalar ko'p hollarda yetarli.


Keyingi dars

27-dars: Rate Limiting — express-rate-limit, brute force himoyasi