Неожиданная находка в мире безопасности
Несколько недель назад обсуждение одной уязвимости безопасности в .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 и широкой доступности сегодня эта книга по‑прежнему представляет интерес для всех, кто хочет лучше понять эволюцию безопасной разработки программного обеспечения.