Заголовки безопасности в Nest
Браузер по умолчанию доверяет ответу сервера и может показать его во фрейме чужой страницы или угадать тип содержимого. Без явных указаний клиент ведёт себя менее осторожно, чем того ждёт API.
Часть рисков снимают заголовки безопасности в каждом ответе. Их задают до вызова метода контроллера, например функцией промежуточного слоя Express. Готовый пакет для всех заголовков сразу здесь не подключаем: достаточно нескольких записей вручную.
Покажем на примере постов:
import { NextFunction, Request, Response } from 'express';
export function postSecurity(
req: Request,
res: Response,
next: NextFunction,
) {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('Referrer-Policy', 'no-referrer');
next();
}
Контроллер отдаёт список по префиксу темы:
import { Controller, Get } from '@nestjs/common';
@Controller('posts')
export class PostController {
@Get()
getPosts(): string {
return 'All posts';
}
}
В корневом модуле повесим слой на адреса списка:
import {
MiddlewareConsumer,
Module,
NestModule,
} from '@nestjs/common';
import { PostController } from './post.controller.js';
import { postSecurity } from './post.security.js';
@Module({
controllers: [PostController],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(postSecurity).forRoutes('posts');
}
}
Добавьте функциональный слой
со служебными заголовками
ответа для адресов
WorkerController
и подключите его в
WorkersModule.