Безопасные методы кодирования C++

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

NB: Помимо практики кодирования, стоит упомянуть и защищенные библиотеки, защищающие от подобных атак.

Л.Е.: Как было предложено MSalters в комментариях, этот вопрос был разделен на два отдельных вопроса: один для C++ и один для C. Также см. Практику кодирования Secure C.

6 ответов

Решение

Книга " Написание безопасного кода" очень хороша для объяснения проблем безопасности и того, как их избежать. Книга вышла некоторое время, но большинство затронутых тем по-прежнему актуальны.

Херб Саттер "Исключительные C++" и "Стандарты кодирования C++". Бесценный.

Marshall Cline C++ faq. Расскажу вам все о распространенных подводных камнях. Бесплатный онлайн.

Совместные стандарты кодирования C++ для истребителей-истребителей- хорошее начало, хотя в основном они касаются надежности, а не безопасности.

Стандарт кодирования SEI CERT C++ специально разработан для решения всех вопросов безопасности. CERT расшифровывается как Computer Emergency Response Team, которая является экспертной группой, которая занимается инцидентами компьютерной безопасности.

Мне эта книга показалась мне очень полезной. Руководство по безопасному программированию для C и C++: рецепты для криптографии, аутентификации, проверки ввода и многого другого

В нем много примеров как для Linux (posix), так и для Windows, в отличие от ранее упомянутого " Написание безопасного кода", второе издание.

Позвольте мне начать

  • Избегайте динамически выделяемой памяти, используя malloc
  • (связанный) использовать массив фиксированного размера, когда это возможно, или infact в C++ избегать массивов в стиле C, когда это возможно
  • избегать использования (void *)
Другие вопросы по тегам