Обнаруженная в openssl уязвимость окончательно убедила меня в том, что принятый ныне подход к написанию сетевых приложений неверен, а мои старые идеи о том как правильно — даже разумнее, чем я думал
Одна функция — одно приложение
В Linux-мире считается хорошим тоном подход «одна функция — одно приложение». К сожалению нынешним поколением кулхацкеров хронически нарушающееся.
Идея объединять в одно приложение работу с сетью, и работу собственно с данными катастрофически опасна. При этом реализована в большинстве современных приложений.
Ну блин, сколько раз уже говорилось — ну не надо тот же openssl компилировать с приложением. Реализовать отдельный шлюз-мультиплексор, аналогично xinetd, и работать исключительно через него — гораздо более умный вариант. По крайней мере это лишило бы возможности неограниченного доступа к пользовательским данным при ошибке в сетевой части.
Одно приложение — один компьютер
Последнее время среди коллег замечаю развитие конструктивной паранои — раскидывать все сервисы по разным виртуальным машинам. Но, так как и в них бывают ошибки, с учетом ныне дешевых и компактных машинок на ARM начинаю склоняться к идее «одно приложение — один компьютер», одновременно с политикой безопасности, предусматривающей полное недоверие к физической среде, через которую этот кластер взаимодействует.
Похоже только так можно минимизировать масштабы ущерба в подобных ситуациях.
Хороший протокол — простой протокол
SSL и TLS слишком тяжеловесны, раз при всей их распространненности и важности для инфраструктуры нет доступной заведомо качественной их реализации, которой можно было бы делать полный аудит каждого изменения.
Им, очевидно, необходима замена.