Каждый день мы слышим, что в такой-то программе нашли такую-то уязвимость. Опасность может варьировать от слабой, до критической. Причем, этих сообщений так много, что мы перестали на них реагировать и перестали задумываться над вопросом - почему эти самые ошибки в программировании продолжают возникать, если все основные паттерны давно известны и знакомы даже школьнику?
Какой современный программист не слышал о переполнении буфера, SQL-инъекции, межсайтовом скриптинге и т.п.? Для особо одарённых есть средства предотвращения таких ошибок. Системы автоматической защиты стека, функции-обертки против SQL-инъекций и т.д.
Но ничего не помогает. Вчера обновил движок сайта, сегодня вышла новая версия, закрывающая "некоторые критические ошибки". Опять развлечение на полдня.
Я думаю, главная причина непрекращающегося потока сообщений об уязвимостях — сами сообщения об уязвимостях. В них нет главного — имени человека, который допустил ошибку, а значит и нет ответственности.
Например, если бы какой-нибудь John Smith из Microsoft чаще других примелькался бы в сообщениях об уязвимостях, то его выперли бы с работы. А новый работодатель, принимая к сведению репутацию Джона как отъявленного бракодела, не факт что нанял бы. Бывшие коллеги Джона, увидев что творится, сами начали бы уделять больше внимания вопросам безопасности. Может быть в этом причина, как думаете?
Думаю, не в этом. Во первых, не так то просто определить конкретного John Smith =). Да и компании, нанимая на работу толпу индусов, врятли ожидают от них высокого профессионализма и ответственности.
Во вторых, идеального софта нету (точнее, есть: программа из 0 байт =) . но у нее и пользователей будет столько же), поэтому время работы над вопросами безопасности можно увеличивать практически до бесконечности, всеравно абсолютно все уязвимости не исправишь. А время - ценнейший ресурс =). Проще патчи выпускать).
Тем более, что в условиях жесткой конкуренции промедление с выпуском продукта может дорого обойтись. Собственно, обычно продукт выпускается таким, каким его выгодней выпустить. (и это, наверное, неплохо, т.к. в противном случае многие продукты так и не были бы выпущены, ибо не окупили бы себя)
Сложность ПО растёт. И по мере сложности и ростёт и количесво возможностей его сломать. И разобратся с ним всё сложнее.