Опасные функции вызывают возможное переполнение буфера в буфере назначения
Эта проблема возникает, когда ваш код использует стандартные функции, которые записывают данные в буфер таким образом, который может привести к переполнению буфера.
В следующей таблице перечислены опасные стандартные функции, риски использования каждой функции и какие функции использовать вместо этого. Флажки шашки:
Любое использование по своей сути опасной функции.
Использование возможно опасной функции только в том случае, если размер буфера, в который записываются данные, может быть определено во время компиляции. Шашка не помечает использование такой функции динамически выделенным буфером.
| Опасная функция | Уровень риска | Более безопасная функция |
|---|---|---|
gets | По своей сути опасно - Вы не можете контролировать длину входов с консоли. | fgets |
cin | По своей сути опасно - Вы не можете контролировать длину входов с консоли. | Избегайте или предварительные вызовы cin с cin.width. |
strcpy | Возможно, опасно - если длина источника больше, чем адрес назначения, может произойти переполнение буфера. | strncpy |
stpcpy | Возможно, опасно - если длина источника больше, чем адрес назначения, может произойти переполнение буфера. | stpncpy |
lstrcpy или StrCpy | Возможно, опасно - если длина источника больше, чем адрес назначения, может произойти переполнение буфера. | StringCbCopy, StringCchCopy, strncpy, strcpy_s, или strlcpy |
strcat | Возможно, опасно - если результат конкатенирования больше, чем адрес назначения, может произойти переполнение буфера. | strncat, strlcat, или strcat_s |
lstrcat или StrCat | Возможно, опасно - если результат конкатенирования больше, чем адрес назначения, может произойти переполнение буфера. | StringCbCat, StringCchCat, strncay, strcat_s, или strlcat |
wcpcpy | Возможно, опасно - если длина источника больше, чем адрес назначения, может произойти переполнение буфера. | wcpncpy |
wcscat | Возможно, опасно - если результат конкатенирования больше, чем адрес назначения, может произойти переполнение буфера. | wcsncat, wcslcat, или wcncat_s |
wcscpy | Возможно, опасно - если длина источника больше, чем адрес назначения, может произойти переполнение буфера. | wcsncpy |
sprintf | Возможно, опасно - если выходная длина зависит от неизвестных длин или значений, может произойти переполнение буфера. | snprintf |
vsprintf | Возможно, опасно - если выходная длина зависит от неизвестных длин или значений, может произойти переполнение буфера. | vsnprintf |
Эти функции могут вызвать переполнение буфера, которое злоумышленники могут использовать, чтобы проникнуть в вашу программу.
Исправление зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Вы можете реализовать исправление на любом событии в последовательности. Если сведения о результате не отображают историю событий, можно отследить их с помощью опций правого щелчка в исходном коде и просмотреть предыдущие связанные события. Смотрите также Результаты интерпретации Bug Finder в интерфейсе пользователя Polyspace Desktop.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
| Группа: Безопасность |
| Язык: C | C++ |
| По умолчанию: Off |
Синтаксис командной строки
: DANGEROUS_STD_FUNC |
| Влияние: Низкое |
| ИДЕНТИФИКАТОР CWE : 242, 676 |
Find defects (-checkers) | Invalid use of standard library string routine | Unsafe standard function | Use of obsolete standard function