Топ-10 опасных ошибок в программировании на С?


2

Каковы наиболее опасные ошибки в программировании на С?

например, неправильное использование strcpy вызывает переполнение стека и инъекцию кода.

Я ищу по крайней мере, 10 плохой шаблон программирования на C.

  0

Не зная, что вы делаете, это № 1. Пометить, чтобы закрыть как плохой субъектив. 09 авг. 132013-08-09 09:00:20

+2

Я ищу десятку рискованных ошибок в C? что вы хотите узнать больше? Я разработчик C, и я хочу их избежать. 09 авг. 132013-08-09 09:20:55

  0

Мой список http://www.andromeda.com/people/ddyer/topten.html 11 авг. 132013-08-11 03:13:39

1

Я думаю, что лучший способ узнать ответ на этот вопрос - это читать много книг и делать лучшие практики. Я советую вам эту книгу Secure Coding in C and C++ на всю тему о безопасном кодировании в c.


1

Вы можете посмотреть на CWE/SANS Top 25 Most Dangerous Software Errors. Это касается разработки программного обеспечения в целом (независимо от языка программирования), но также включает ошибки, сделанные на C/C++.


4

Самая опасная ошибка в программировании на С - с использованием C. Это непопулярное утверждение, но многолетний опыт подкрепляет меня.

C - хороший язык программирования, который позволяет вам выражать операции в «абстрактной машине» (как это делает стандарт C), которая будет эффективно переведена в машинный код (инструменты перевода быстро работают и результат быстрый). Однако этот перевод идет по высокой цене, а именно, что они не защищают от ошибок, и существует множество «неопределенных поведений», скрывающихся в тени. Pointer aliasing rules, например, почти никогда не понимаются правильно, что приводит к, казалось бы, хорошему коду, который не срабатывает (иногда способами, которые создают уязвимость, используемым для использования) при использовании более нового компилятора или активированного переключателя оптимизации.

Ищите «список ошибок» - это неправильный образ мышления. Вам нужен черный список: все, чего следует избегать, при условии, что «все остальное» безопасно. Вы должны выбрать белый список: список разрешен способов разработки, за исключением всего остального. Успешные программисты C - это программисты, которые могут поддерживать свою собственную дисциплину до , никогда не используют любую конструкцию, из которой они не справляются. и под «мастерингом» я имею в виду способность описать, как компилятор C переведет это в коды операций сборки, включая все возможные оптимизации, которые разрешают компиляторы C.

Хороший способ «использовать C», чтобы написать одну или две процедуры, которые действительно нуждаются в скорости в некоторых оптимизированной C, а остальную часть кода в более безопасном языке, который позволит быстрее, проще и безопаснее (например, Python, C#, Node.js, Perl ... выбор большой).