Helmet — xavfsizlik headerlari
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