Helmet
Helmet HTTP headerlarni mos ravishda o'rnatish orqali ilovangizni ba'zi mashhur veb zaifliklardan himoya qilishga yordam beradi. Umuman olganda, Helmet xavfsizlikka oid HTTP header
Helmet HTTP headerlarni mos ravishda o'rnatish orqali ilovangizni ba'zi mashhur veb zaifliklardan himoya qilishga yordam beradi. Umuman olganda, Helmet xavfsizlikka oid HTTP headerlarni o'rnatadigan kichik middleware funksiyalar to'plamidir (batafsil bu yerda).
helmetni global qo'llash yoki ro'yxatdan o'tkazish boshqa app.use() chaqiruvlari yoki app.use() ni chaqirishi mumkin bo'lgan setup funksiyalaridan oldin bo'lishi kerakligini unutmang. Bu platformaning (ya'ni Express yoki Fastify) ishlash usuli bilan bog'liq; bunda middleware/route lar aniqlanish tartibi muhim. Agar siz helmet yoki cors kabi middlewarelarni route aniqlangandan keyin ishlatsangiz, u middleware o'sha routega qo'llanmaydi, faqat undan keyin aniqlangan routelarga qo'llanadi.
Express bilan foydalanish (default)
Avval kerakli paketni o'rnating.
1$ npm i --save helmetO'rnatish tugagach, uni global middleware sifatida qo'llang.
1import helmet from 'helmet';
2// somewhere in your initialization file
3app.use(helmet());helmet, @apollo/server (4.x) va Apollo Sandbox birga ishlatilganda, Apollo Sandboxda CSP bilan muammo bo'lishi mumkin. Bu muammoni hal qilish uchun CSPni quyida ko'rsatilgandek sozlang:
app.use(helmet({
crossOriginEmbedderPolicy: false,
contentSecurityPolicy: {
directives: {
imgSrc: [`'self'`, 'data:', 'apollo-server-landing-page.cdn.apollographql.com'],
scriptSrc: [`'self'`, `https: 'unsafe-inline'`],
manifestSrc: [`'self'`, 'apollo-server-landing-page.cdn.apollographql.com'],
frameSrc: [`'self'`, 'sandbox.embed.apollographql.com'],
},
},
}));
Fastify bilan foydalanish
Agar FastifyAdapter dan foydalanayotgan bo'lsangiz, @fastify/helmet paketini o'rnating:
1$ npm i --save @fastify/helmetfastify-helmet middleware sifatida emas, balki Fastify plagini sifatida ishlatilishi kerak, ya'ni app.register() orqali:
1import helmet from '@fastify/helmet'
2// somewhere in your initialization file
3await app.register(helmet)apollo-server-fastify va @fastify/helmet birga ishlatilganda, GraphQL playgroundda CSP bilan muammo bo'lishi mumkin, bu to'qnashuvni hal qilish uchun CSPni quyida ko'rsatilgandek sozlang:
await app.register(fastifyHelmet, {
contentSecurityPolicy: {
directives: {
defaultSrc: [`'self'`, 'unpkg.com'],
styleSrc: [
`'self'`,
`'unsafe-inline'`,
'cdn.jsdelivr.net',
'fonts.googleapis.com',
'unpkg.com',
],
fontSrc: [`'self'`, 'fonts.gstatic.com', 'data:'],
imgSrc: [`'self'`, 'data:', 'cdn.jsdelivr.net'],
scriptSrc: [
`'self'`,
`https: 'unsafe-inline'`,
`cdn.jsdelivr.net`,
`'unsafe-eval'`,
],
},
},
});
// If you are not going to use CSP at all, you can use this:
await app.register(fastifyHelmet, {
contentSecurityPolicy: false,
});