Перейти к содержанию

Начало урока

Лучшие практики безопасности

Выпустите Node-сервис, который выдерживает атаки, реально встречающиеся в продакшене

Главная идея: безопасность — это не функция, которую добавляют в конце; это набор привычек, применяемых на каждом слое — как вы строите запросы, как выводите данные, как храните секреты, как сливаете недоверенные объекты, какие HTTP-заголовки отправляете, как часто клиенту разрешено вас вызывать и каким зависимостям вы доверяете. Этот урок превращает список угроз в стиле OWASP в конкретный код на Node и честные компромиссы.
К концу урока вы сможете:
  • останавливать инъекции (SQL и команд ОС) параметризацией вместо склейки строк;
  • предотвращать XSS, кодируя вывод и применяя Content-Security-Policy;
  • держать секреты вне исходников, логов и ответов об ошибках;
  • распознавать и блокировать загрязнение прототипа при слиянии объектов и разборе JSON;
  • усиливать HTTP с помощью helmet, гасить злоупотребления ограничением частоты и проверять зависимости.

1. Эшелонированная защита: не доверяйте одной стене

Любой запрос из интернета — это недоверенный ввод, пока не доказано обратное. Надёжный сервис не полагается на одну проверку; он применяет перекрывающиеся меры, чтобы одна ошибка не стала взломом. Это эшелонированная защита: валидация на границе, безопасный доступ к данным в середине и минимальные привилегии везде.

Аналогия. Замок выживает не благодаря одной толстой двери. У него есть ров, внешняя стена, внутренняя стена и стража у донжона. Если атакующий проскользнул мимо одной преграды, следующая всё равно его остановит. Ваш ограничитель частоты, валидатор, параметризованный запрос и заголовки безопасности — это те концентрические стены.

На схеме ниже показан запрос, проходящий сквозь слои усиленного Express-приложения. Каждая полоса — независимая мера; полезная нагрузка должна победить все, чтобы причинить вред.

TLS / HTTPS транспорт заголовки безопасности helmet ограничение частоты валидация и очистка ввода параметризованный доступ к данным (единственный слой, касающийся БД) запрос
Эшелонированная защита: запрос должен пройти все концентрические меры, прежде чем достигнет данных.

Держите в голове одно правило: никогда не принимайте решение о безопасности на основе данных, которыми клиент полностью управляет. Валидируйте их, экранируйте или привязывайте — но не склеивайте во что-то мощное.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя