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