Helmet.js

Тема дорожной карты · Node.js

helmet — это коллекция middleware-функций Express.js, устанавливающих связанные с безопасностью HTTP-заголовки ответов и защищающих серверные приложения Node.js от распространённых веб-уязвимостей при минимальной настройке. Установив helmet через npm и вызвав app.use(helmet()) в приложении Express.js, вы автоматически задаёте заголовки Content-Security-Policy, X-Frame-Options, Strict-Transport-Security, X-Content-Type-Options и ряд других, рекомендованных руководящими принципами безопасности OWASP. Каждое субmiddleware helmet можно индивидуально включить, отключить или тонко настроить — например, helmet.contentSecurityPolicy({ directives: { ... } }) позволяет серверному приложению Node.js определить строгую CSP-политику, предотвращающую XSS-атаки путём разрешения только доверенных источников скриптов. helmet не заменяет другие меры безопасности, такие как валидация входных данных, аутентификация или ограничение частоты запросов, но является необходимым первым уровнем защиты для любого обращённого в продакшн API или веб-приложения Node.js. Добавление helmet в цепочку middleware Express.js перед обработчиками маршрутов — стандартная лучшая практика безопасности, рекомендованная документацией по безопасности Node.js и экосистемой npm.

Как это работает

Helmet.js имеет слои: валидация input (zod, ajv) на границе, параметризованные SQL-запросы, эскейп пользовательского контента в HTML (или templating engine с авто-эскейпом), HTTPS везде (терминируется на reverse proxy), секреты в env (не в репо), правильные флаги JWT/cookie (HttpOnly, Secure, SameSite). Middleware helmet добавляет разумные HTTP-заголовки (HSTS, X-Frame-Options, CSP).

Когда применять

Security-baseline с первого дня: rate-limit на auth-эндпойнтах, лимит размера body, хеш паролей через bcrypt/argon2, подпись JWT сильным секретом + короткий TTL, валидация каждого input. npm audit в CI с гейтом на high/critical. OWASP ASVS — как чек-лист при планировании. Penetration test перед публичным запуском — bug bounty дешевле инцидентов.

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

Ловушки Helmet.js: игнор CVE в зависимостях (каждый — потенциальный инцидент); JWT-секрет утёк в клиентский код или git-history; SQL-инъекция, потому что кто-то забыл параметр (SELECT * FROM u WHERE id = ${req.query.id} — никогда); eval или Function() на user-input; пароли в MD5/SHA1 (используйте argon2id с правильными параметрами). Security — это процесс, не разовый аудит.

Связанные понятия

Полезные ресурсы