Как уменьшить уязвимость strcat и strcmp?

Я знаю, что зал семьи strcpy, strcat а также strcmp иметь уязвимость переполнения буфера, чтобы смягчить strcpy Уязвимость кто-то может использовать strlcpy, что насчет strcat а также strcmpЕсть ли безопасные версии этих функций или кто-то должен проверить переменные вручную?

1 ответ

Решение

Я рекомендую о семействе str-n-func:

Используйте strncpy вместо strcpy, strncat вместо strcat, strncmp вместо strcmp и так далее.

Дополнительный n предназначен для дополнительного (третьего) параметра, то есть как максимальное количество символов для копирования / объединения / сравнения.

Читайте о них здесь (с примерами):

http://www.cplusplus.com/reference/cstring/strncmp/

http://www.cplusplus.com/reference/cstring/strncat/

Замечания:

  1. Функции strlcpy и strlcat не являются стандартными.
  2. Вы должны быть осторожны, так как (например) копирование не более n символов из строки, содержащей более n символов (до первого нуля), будет заканчиваться строкой, не заканчивающейся нулем.
  3. Обычно, как программист, у вас есть возможность узнать, какова длина строк, с которыми вы имеете дело, и потому что предыдущее замечание, даже если вы используете str-n-функции, вам все равно нужно это знать.
  4. Проблема главным образом в чтении ввода в некоторый конечный буфер. Вы не должны использовать scanf или gets, и вы можете использовать fgets. Например: вместо использования get для чтения строки из стандартного ввода используйте fgets следующим образом:

    fgets (str, sizeof (str), stdin);

Другие вопросы по тегам