2022-10-04 12:46:01
Хардкорные инструменты для WEB-разработкиМы привыкли, что бэкенд для WEB пишут на высокоуровневых языках программирования со сборкой мусора: Python, Go, JavaScript, PHP, Java и других. Появляются новые фреймворки, упрощающие типовые задачи разработки и улучшающие безопасность решений, тулинг. Таким образом, WEB-бэкенд — отдельная область знания со своей экосистемой, стандартами, типовыми языками и инструментами.
Но возможно ли разработать относительно безопасное WEB-приложение с использованием таких хардкорных инструментов, как язык C? Ответ на этот вопрос в полушутливой форме дает
Кристапс Джонсонс (Kristaps Dzonsons).
Кристапс предлагает использовать стек технологий под названием
BCHS: BSD, C, httpd, SQLite. Наверняка в названии вы уловили шутливую аналогию с LAMP: Linux, Apache, MySQL, PHP. Но подождите, разве C подходит для таких задач? WEB-приложения оперируют множеством строк (например, JSON объектами), а в этом язык C не слишком хорош — сказывается ручное управление памятью. Более того, чтобы разработать действительно безопасное приложение на C, требуется серьезная инженерная дисциплина, большой опыт системной разработки и глубокое знание стандарта языка — статический и динамический анализ способны отловить далеко не все ошибки и уязвимости.
Для достижения такой, казалось бы, странной цели, Кристапс предлагает использовать метод разработки, похожий на Secure by design. Его подход подразумевает разбиение приложения на независимые процессы, общающиеся через примитивы межпроцессного взаимодействия. При этом, привилегии этих процессов сбрасываются ровно до того уровня, который необходим им для функционирования. OpenBSD позволяет строить такие решения благодаря системным вызовам pledge и unveil. FreeBSD же предоставляет гибкий механизм Capsicum.
Также Кристапс приводит множество способов, помогающих снизить вероятность ошибки в критическом коде: использование подмножества языка, строгие правила кодирования (SEI CERT), генерация кода, статический и динамический анализ, фаззинг.
Таким образом, благодаря правильной архитектуре, верно выбранным принципам проектирования безопасных систем и хорошему тулингу, удается построить быстрые и безопасные системы даже на столь небезопасном языке, как C.
#digest
2.0K views09:46