Защо хората продължават да използват структури от данни, които позволяват преливане?

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


person ektrules    schedule 28.03.2012    source източник


Отговори (1)


  • Невежество

Голям процент от програмистите (според моето може би несправедливо негативно изкривено виждане за света) или изобщо не разбират опасенията за сигурността, или не разбират кои структури от данни, които използват, са уязвими. Цял тон програмисти преминаха през 90-те години, когато всички използваха gets() и дори всяка книга за C го насърчаваше. Сега ще бъдете наречен луд, ако го използвате. Но не всички получиха бележката!

  • мързел

Подкатегориите включват „никой няма да си прави труда да атакува моето приложение“, „все пак е само прототип“ и „трябва да бъде следващата седмица, ще го поправя по-късно“

  • Трудност (възприемана или по друг начин)

Всъщност е много трудно да се напише преносим, ​​правилен и защитен C код. Почти всеки нетривиален проект, който не е написан с наистина набито око, вероятно има грешки, ако не и директни уязвимости. И в неуправляем език като C, много грешки имат потенциал да бъдат проблеми със сигурността.

Също така е трудно да се направят API, които са едновременно използваеми и сигурни „по дизайн“.

И за последния нож в трупа, всички тези проблеми засягат всички разработчици в проекта. Това включва всички библиотеки, които използвате, всички библиотеки, които те използват, до и включително ядрото на операционната система, което използвате. Всеки програмист, който попадне в някакъв капан за сигурност по пътя, почти компрометира цялото нещо.

Много от тези проблеми се подобряват с управляваните езици - поне не можете да драскате върху произволна памет, но все още съществуват различни класове проблеми със сигурността.

person Steven Schlansker    schedule 29.03.2012
comment
Невежеството е №1. Сигурността и най-добрите практики не се преподават или дори се набляга. И както беше отбелязано с gets(), най-добрите практики могат да се променят с времето. - person LaJmOn; 29.03.2012