Опасные функции вызывают возможное переполнение буфера в целевом буфере
Эта проблема возникает, когда код использует стандартные функции, которые записывают данные в буфер таким образом, что это может привести к переполнению буфера.
В следующей таблице перечислены опасные стандартные функции, риски использования каждой функции и используемые функции. Флаги средства проверки:
Любое использование по своей сути опасной функции.
Использование возможной опасной функции только в том случае, если размер буфера, в который записываются данные, может быть определен во время компиляции. Средство проверки не помечает использование такой функции с динамически выделенным буфером.
| Опасная функция | Уровень риска | Более безопасная функция |
|---|---|---|
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 |
Эти функции могут вызвать переполнение буфера, которое злоумышленники могут использовать для проникновения в вашу программу.
Исправление зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Исправление может быть реализовано для любого события в последовательности. Если сведения о результатах не отображают историю событий, можно выполнить обратную трассировку, щелкнув правой кнопкой мыши параметры в исходном коде и просмотреть предыдущие связанные события. См. также раздел Интерпретация результатов поиска ошибок в интерфейсе пользователя Polyspace Desktop.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
| Группа: Безопасность |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
DANGEROUS_STD_FUNC |
| Воздействие: Низкий |
| CWE ID: 242, 676 |
Find defects (-checkers) | Invalid use of standard library string routine | Unsafe standard function | Use of obsolete standard function