Большой процент программистов (в моем, возможно, неоправданно негативном взгляде на мир) либо вообще не понимают проблем безопасности, либо не понимают, какие структуры данныхони используют уязвимы.Целая тонна программистов прошла через 90-е годы, когда все использовали gets()
, и даже каждая книга на Си поддерживала это.Теперь вы будете называться сумасшедшим, чтобы использовать его.Но не все получили памятку!
Подкатегории включают в себя «никто не потрудится атаковать мое приложение», «в любом случае, это всего лишь прототип» и «это из-за следующегонеделю, я исправлю это позже "
- Сложность (воспринимаемая или иная)
На самом деле действительно трудно написать переносимый, правильный и безопасный код C.Почти у любого нетривиального проекта, который не написан с действительно острым глазом, вероятно, есть ошибки, если не явные уязвимости.А в неуправляемом языке, таком как C, многие ошибки могут создавать проблемы с безопасностью.
Трудно также создать API, которые будут как полезными, так и безопасными "по замыслу".
И дляПоследний нож в трупе, все эти проблемы затрагивают всех разработчиков по всему проекту.Это включает в себя любые библиотеки, которые вы используете, любые библиотеки, которые они используют, вплоть до ядра операционной системы, которое вы используете.Любой программист, попавший в ловушку безопасности на этом пути, в значительной степени ставит под угрозу все это.
Многие из этих проблем решаются с помощью управляемых языков - по крайней мере, вы не можете набросать произвольную память, но разные классыпроблемы безопасности все еще существуют.