Опасные функции вызывают возможное переполнение буфера в целевом буфере
Эта проблема происходит, когда ваш код использует стандартные функции, которые записывают данные к буферу способом, который может привести к переполнению буфера.
В следующей таблице перечислены опасные стандартные функции, риски использования каждой функции, и что функция использовать вместо этого. Флаги средства проверки:
Любое использование по сути опасной функции.
Использование возможно опасной функции, только если размер буфера, в который записаны данные, может быть определен во время компиляции. Средство проверки не отмечает использование такой функции с динамически выделенным буфером.
| Опасная функция | Рискните уровнем | Более безопасная функция |
|---|---|---|
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 Bug Finder.
Смотрите примеры мер ниже.
Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты 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