Почему люди продолжают использовать структуры данных, которые допускают переполнение? - PullRequest
0 голосов
/ 29 марта 2012

Переполнение буфера, похоже, является одной из основных причин уязвимостей в безопасности.Я редко программирую на C / C ++ (только для определенных курсовых работ), поэтому я могу что-то упустить, но я не понимаю, почему люди продолжают использовать структуры данных, которые допускают переполнения.Почему не все структуры данных выдают исключение при заполнении?Похоже, это простое решение значительно повысит безопасность программного обеспечения.

1 Ответ

2 голосов
/ 29 марта 2012
  • Невежество

Большой процент программистов (в моем, возможно, неоправданно негативном взгляде на мир) либо вообще не понимают проблем безопасности, либо не понимают, какие структуры данныхони используют уязвимы.Целая тонна программистов прошла через 90-е годы, когда все использовали gets(), и даже каждая книга на Си поддерживала это.Теперь вы будете называться сумасшедшим, чтобы использовать его.Но не все получили памятку!

  • Laziness

Подкатегории включают в себя «никто не потрудится атаковать мое приложение», «в любом случае, это всего лишь прототип» и «это из-за следующегонеделю, я исправлю это позже "

  • Сложность (воспринимаемая или иная)

На самом деле действительно трудно написать переносимый, правильный и безопасный код C.Почти у любого нетривиального проекта, который не написан с действительно острым глазом, вероятно, есть ошибки, если не явные уязвимости.А в неуправляемом языке, таком как C, многие ошибки могут создавать проблемы с безопасностью.

Трудно также создать API, которые будут как полезными, так и безопасными "по замыслу".

И дляПоследний нож в трупе, все эти проблемы затрагивают всех разработчиков по всему проекту.Это включает в себя любые библиотеки, которые вы используете, любые библиотеки, которые они используют, вплоть до ядра операционной системы, которое вы используете.Любой программист, попавший в ловушку безопасности на этом пути, в значительной степени ставит под угрозу все это.

Многие из этих проблем решаются с помощью управляемых языков - по крайней мере, вы не можете набросать произвольную память, но разные классыпроблемы безопасности все еще существуют.

...