advanced

Input validation, output encoding и file upload security

Validate untrusted input на boundaries, encode output под контекст и изолируйте uploads через type checks, size limits, scanning и private storage.

Валидируйте на trust boundaries: HTTP body, query, headers, webhooks, uploads. Schema validators (Zod, Joi, TypeBox) и отклонение unknown fields — fail closed.

					import { z } from 'zod';

const CreateUser = z.object({
  email: z.string().email().max(320),
  name: z.string().min(1).max(120),
}).strict();

const input = CreateUser.parse(req.body);
				

Output encoding по контексту — HTML, attribute, URL, JS string. Validation не заменяет encoding на выходе.

File uploads: лимиты размера, allowlist MIME по magic bytes (не только extension), хранение вне web root, случайные object keys, antivirus/async scan, раздача signed URLs, не прямые пути.

На интервью: allowlist vs blocklist; `multipart` и streaming limits в Node; path traversal в архивах.

Типовые ошибки: доверие client `Content-Type`; uploads из `/public`; SVG со script.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Schema validation на каждый внешний input.
  • Encode на output по sink.
  • Private storage + signed download URLs.
  • Stream uploads с backpressure и size caps.