Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C++273
  • C#210

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD919
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме NestJSВсе вопросы
NestJSMiddleТеория

Как реализовать rate limiting и заголовки безопасности в NestJS?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Rate limiting реализуется через @nestjs/throttler (декоратор @Throttle + ThrottlerGuard), заголовки безопасности — через пакет helmet подключённый как middleware. Оба механизма настраиваются глобально в AppModule.

Установка

npm install @nestjs/throttler
npm install helmet

Rate Limiting в NestJS

Официальный пакет @nestjs/throttler предоставляет guard и модуль для ограничения частоты запросов. Начиная с версии 5.x, модуль поддерживает несколько «throttler-ов» одновременно (например, короткое и длинное окно).

Конфигурация ThrottlerModule

// app.module.ts
import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';
import { APP_GUARD } from '@nestjs/core';

@Module({
  imports: [
    ThrottlerModule.forRoot([
      {
        name: 'short',   // 10 запросов за 1 секунду
        ttl: 1000,
        limit: 10,
      },
      {
        name: 'long',    // 100 запросов за минуту
        ttl: 60000,
        limit: 100,
      },
    ]),
  ],
  providers: [
    {
      provide: APP_GUARD,
      useClass: ThrottlerGuard,  // глобальный rate limit
    },
  ],
})
export class AppModule {}

Тонкая настройка на уровне маршрута

import { Throttle, SkipThrottle } from '@nestjs/throttler';

@Controller('auth')
export class AuthController {
  // Жёсткий лимит для логина: 5 попыток за 60 секунд
  @Throttle({ default: { ttl: 60000, limit: 5 } })
  @Post('login')
  login(@Body() dto: LoginDto) { ... }

  // Публичный endpoint — пропускаем throttler
  @SkipThrottle()
  @Get('health')
  health() { return 'ok'; }
}

Rate limiting с Redis (для многоподового деплоя)

По умолчанию счётчики хранятся в памяти. В многоподовом окружении нужен Redis-хранилище:

import { ThrottlerStorageRedisService } from '@nest-lab/throttler-storage-redis';

ThrottlerModule.forRootAsync({
  inject: [ConfigService],
  useFactory: (config: ConfigService) => ({
    throttlers: [{ ttl: 60000, limit: 100 }],
    storage: new ThrottlerStorageRedisService({
      host: config.get('REDIS_HOST'),
      port: config.get('REDIS_PORT'),
    }),
  }),
})

Заголовки безопасности с Helmet

Helmet устанавливает набор HTTP-заголовков, снижающих риск распространённых атак (XSS, clickjacking, MIME-sniffing и др.):

// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import helmet from 'helmet';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // Helmet — подключать ДО всех маршрутов
  app.use(helmet({
    contentSecurityPolicy: {
      directives: {
        defaultSrc: ["'self'"],
        styleSrc: ["'self'", "'unsafe-inline'"],
        imgSrc: ["'self'", 'data:', 'https:'],
        scriptSrc: ["'self'"],
      },
    },
    crossOriginEmbedderPolicy: false,  // отключить если нужен <iframe>
  }));

  // CORS
  app.enableCors({
    origin: process.env.ALLOWED_ORIGINS?.split(',') ?? 'http://localhost:3000',
    credentials: true,
    methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
  });

  await app.listen(3000);
}
bootstrap();

Что устанавливает Helmet по умолчанию

  • X-Content-Type-Options: nosniff — блокирует MIME-sniffing
  • X-Frame-Options: SAMEORIGIN — защита от clickjacking
  • Strict-Transport-Security — принудительный HTTPS (HSTS)
  • X-XSS-Protection: 0 — отключает устаревший XSS-фильтр браузера
  • Referrer-Policy: no-referrer — не передавать Referrer на другие домены
  • Content-Security-Policy — базовая политика (настраивается вручную)

Подводные камни

  • Throttler по умолчанию идентифицирует клиента по IP. За reverse-proxy нужно настроить getTracker на чтение заголовка X-Forwarded-For, иначе все пользователи будут идентифицированы как один IP прокси.
  • ThrottlerGuard возвращает 429 Too Many Requests — убедитесь, что ваш frontend обрабатывает этот статус и не показывает пользователю пустой экран.
  • Helmet нужно подключать через app.use(), а не через @UseInterceptors или guard — он должен быть Express/Fastify middleware.
  • При использовании Fastify вместо Express: helmet не подойдёт, нужен @fastify/helmet с app.register().
  • CSP-директива unsafe-inline для скриптов нивелирует защиту от XSS — используйте nonce или hash вместо неё.
  • HSTS (Strict-Transport-Security) в разработке через HTTP сломает локальный доступ — отключайте helmet или конкретную директиву в dev-окружении.
  • Глобальный ThrottlerGuard применяется и к WebSocket-шлюзам — убедитесь, что лимиты не слишком строгие для realtime-соединений.

Частые вопросы на собеседовании

  • Что такое NestJS и каковы его основные принципы проектирования?
  • Какова роль модулей в NestJS? Как работает система модулей?
  • В каких backend-проектах NestJS является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Что такое dependency injection (DI) в NestJS и как он реализован?

Типичные ошибки

  • Дает общий ответ про Node.js и не называет конкретные API NestJS.
  • Не объясняет, где в lifecycle находится rate limiting и security headers.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

Что проверяет интервьюер

  • Может объяснить rate limiting и security headers на примере кода.
  • Называет ключевые API: ThrottlerModule, helmet().
  • Использует точные API NestJS, а не вымышленные hooks/decorators/methods.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

Как вы знаете этот вопрос?

Проверить себя по теме NestJS →

Источники

  • https://docs.nestjs.com/security/rate-limiting
←Предыдущий вопросКак реализовать управление доступом на основе ролей (RBAC) в NestJS?Следующий вопрос→Что такое Guards в NestJS? Как реализовать аутентификацию и авторизацию с их помощью?

Связанные темы

NestJSreliabilitysecurity-hardening