Rate this post

Неожиданная находка в мире безопасности

Несколько недель назад обсуждение одной уязвимости безопасности в .NET привело к своеобразному путешествию в прошлое. В ходе этого путешествия обнаружилась неожиданная находка — книга The Developer Highway Code, которая годами спокойно находилась на виду, но оставалась без внимания.

Книга была опубликована в 2006 году при участии Microsoft UK и задумывалась как практическое руководство по созданию более безопасных .NET‑приложений. Несмотря на возраст, многие изложенные в ней идеи остаются удивительно актуальными и сегодня.

Что такое The Developer Highway Code

Подзаголовок книги — The Drive for Safer Coding («Курс на безопасное программирование»). Она призвана обучать разработчиков принципам безопасной инженерии программного обеспечения с помощью понятных объяснений, структурированных чек-листов и даже юмора.

В книге рассматривается широкий круг тем — от сетевой инфраструктуры до доступа к базам данных — на примере платформы .NET. Отдельного внимания заслуживает стиль изложения: серьёзные рекомендации по безопасности соседствуют с ироничными предупреждениями и наглядными метафорами, что делает материал более запоминающимся. Хотя некоторые шутки сегодня выглядят устаревшими, они придают книге характер.

Структура и основные разделы

Книга состоит из двух крупных частей:

  • Часть первая: безопасная инженерия — принципы, концепции и возможности платформы
  • Часть вторая: чек-листы и списки вопросов — практические шаги для проверки безопасности на разных уровнях

Хотя упоминания .NET Framework 1.1 сегодня выглядят архаично, материалы, посвящённые .NET 2.0, в своё время стали важным шагом вперёд в области безопасной разработки.

Безопасность сети и инфраструктуры

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

  • устанавливать последние обновления безопасности;
  • подписываться на уведомления производителей о найденных уязвимостях;
  • блокировать заведомо уязвимые порты;
  • включать фильтрацию входящего и исходящего трафика;
  • проверять ICMP‑трафик;
  • надёжно защищать административные интерфейсы маршрутизаторов;
  • отключать неиспользуемые сервисы, такие как TFTP (Trivial File Transfer Protocol).

Даже спустя десятилетия эти рекомендации остаются основой грамотной сетевой безопасности.

Защита от SQL‑инъекций

Рекомендации по безопасности работы с базами данных выглядят особенно современно. Авторы настаивают на следующем:

  • использовать хранимые процедуры с параметрами;
  • при отсутствии хранимых процедур применять строго типизированные SQL‑параметры;
  • подключаться к базе данных с учётными записями с минимально необходимыми правами.

Удивительно, насколько мало изменились эти базовые принципы за прошедшие годы.

Что нового принес .NET 2.0

На момент выхода книги .NET 2.0 предлагал ряд важных улучшений в области безопасности:

  • программное управление списками контроля доступа (ACL) из управляемого кода;
  • настройку MachineKey для согласованного шифрования и аутентификации;
  • ClickOnce с песочницей для выполнения Windows Forms‑приложений;
  • Code Access Security (CAS) для ограничения прав кода;
  • классы ConnectionStringBuilder для более безопасной работы со строками подключения;
  • SecureString для защиты конфиденциальных данных в памяти.

Многие из этих механизмов решали задачи, которые и сегодня остаются актуальными — задолго до появления контейнеров и современных систем изоляции.

Безопасность на уровне приложений

В книге подробно описываются практики валидации данных и защиты приложений:

  • проверка входных данных с помощью регулярных выражений;
  • использование встроенных ASP.NET‑валидаторов;
  • полный отказ от доверия к пользовательскому вводу;
  • по возможности отказ от динамических SQL‑запросов;
  • проверка всех недоверенных данных на уровне доступа к данным.

Несмотря на то что примеры относятся ко времени до MVC и современных фреймворков, сам подход к безопасности остаётся актуальным.

Рекомендации по проектированию классов

Особое внимание уделяется объектно‑ориентированному дизайну:

  • использовать максимально строгие модификаторы доступа;
  • закрывать (sealed) базовые классы, не предназначенные для наследования;
  • хранить поля приватными и предоставлять доступ через свойства;
  • делать свойства только для чтения, если запись не требуется;
  • применять строгую идентификацию сборок и механизмы прозрачности безопасности при необходимости.

Некоторые из этих рекомендаций сегодня вызывают споры, но они хорошо отражают подход к безопасности в ранней экосистеме .NET.

Безопасность передачи данных

Авторы рекомендуют:

  • использовать шифрование транспортного уровня для защиты секретов;
  • применять IPSec для взаимодействия между серверами;
  • использовать SSL для защиты каналов на уровне приложений.

Хотя терминология изменилась и сегодня используется TLS, сама идея защиты данных при передаче остаётся неизменной.

Полезное путешествие в прошлое

Возвращение к The Developer Highway Code — это одновременно ностальгия и напоминание о том, что основы безопасности практически не меняются со временем.

Авторами книги являются Фил Уинстанли, технический евангелист Microsoft UK, и Алекс Макман, главный технолог компании CM Group Limited. Их работа остаётся ценным историческим срезом взглядов на безопасность .NET середины 2000‑х годов.

Даже без ISBN и широкой доступности сегодня эта книга по‑прежнему представляет интерес для всех, кто хочет лучше понять эволюцию безопасной разработки программного обеспечения.