Поделиться через


Средства безопасности в CRT

Многие старых функций CRT, имеющие более новая, безопасные версии.Если безопасная функция существует, то помечена старая версия, менее безопасной как нерекомендуемый, а новая версия имеют _s («») убедитесь суффикс.

В данном контексте «нерекомендуемый» просто означает, что использование функции не рекомендуется. он указывает, что функция запланированное быть удален из CRT.

Безопасные функции не препятствуют или исправление ошибок безопасности. вместо этого они перехвата ошибки, если только они происходят.Они выполняют дополнительных проверок для условий ошибки и в случае ошибок, вызывает обработчик ошибок (см. Проверка параметров).

например, strcpy функция нет способа говорить если строка что она копирует слишком велика для буфера назначения.Однако ее аналогом, защищенные strcpy_s, принимающий размер буфера в качестве параметра, поэтому он может определить, переполнение буфера.При использовании strcpy_s чтобы скопировать 11 символов в буфер 10 символа, то ошибка со стороны пользователя. strcpy_s не удалось исправить указанную ошибку, но она может обнаруживать ошибка и отчет выполняется посредством вызова недопустимый обработчик параметра.

Устранение предупреждения устаревании

Существует несколько способов избежать предупреждения announcement для старых, менее безопасных функций.Самое простое просто определять _CRT_SECURE_NO_WARNINGS или warning директива pragma.Это запрещает предупреждения, конечно, но вопросы безопасности, вызвавшим предупреждения все еще существуют.Гораздо лучше оставить предупреждения включено и announcement использования новых средств безопасности CRT.

В C++ самый простой способ выполнения, чтобы использовать Предоставляйте перегруженный шаблона, который во многих случаях исключит предупреждения, заменяя вызовы announcement нерекомендуемый с вызовами к новым функциям безопасности версий этих функций.Например, рассмотрим этот вызов нерекомендуемый strcpy.

   char szBuf[10]; 
   strcpy(szBuf, "test"); // warning: deprecated 

Определение _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES по мере 1 исключает предупреждение путем изменения strcpy вызов strcpy_s, который предотвращает переполнение буфера.Дополнительные сведения см. в разделе Предоставляйте перегруженный шаблона.

Для этих нерекомендуемых функций без убедитесь перегрузки шаблона, необходимо рассмотреть возможность определенно вручную обновить Код для использования защищенного версий.

Другой источник предупреждений устаревания, не связаны с безопасностью, функции POSIX.Замените имена функций POSIX с стандартными числами (например, изменение Доступ В _access) или отключить предупреждения с указанием POSIX-родственные announcement _CRT_NONSTDC_NO_WARNINGS.Дополнительные сведения см. в разделе Deprecated CRT Functions.

дополнительные средства безопасности

Некоторые функции безопасности включают в себя следующее:

  • Parameter Validation.Параметры, передаваемые функции CRT проверяются в обоих предоставляют функции и во многих функций существующие версий.Эти проверки:

    • Проверить NULL значения, передаваемые функциям.

    • Проверка значения, перечисленные на допустимость.

    • Проверить, что статистические значения в допустимых диапазонах.

  • Дополнительные сведения см. в разделе Проверка параметров.

  • Обработчик для недопустимых параметров также недоступен разработчику.При обнаружении недопустимого параметра вместо assert и выйти из приложения, CRT предоставляет способ проверки этих проблем _set_invalid_parameter_handler функция.

  • Sized Buffers.Безопасные функции требуют размер буфера был передан в любой функции, которая записывается в буфер.Безопасные версии проверить, что буфер велик перед записью в него, помогающ избежать небезопасный буфер переливается через границы ошибки, которые могут разрешать вредоносный Код для выполнения.Обычно эти функции возвращают errno тип кода ошибки и вызывает обработчик параметра, если недопустимый размер буфера, слишком мал).Функции, считанные из входных буферов, например getsбезопасные версии, обладающее, которые требуют, чтобы указать максимальный размер.

  • Null termination.Некоторые функции, которые осталось потенциально non-завершенные строки имеют безопасные версии, которые гарантируют, что завершенные строки правильно null.

  • Enhanced error reporting.Коды ошибок безопасных функций, возвращенные с дополнительными сведениями об ошибке не оказалось с ранее созданный функциями.Безопасные функции и многие существующие функции теперь устанавливают errno и часто возвращайте errno тип Кода также лучше предоставлять отчеты об ошибках.

  • Filesystem security.Доступ к файлам безопасной поддержки API ФАЙЛОВОГО ввода-вывода безопасный в случае по умолчанию.

  • Windows security.Безопасные процесс API обеспечивают политики безопасности и позволяют ACL.

  • Format string syntax checking.Недопустимые строки обнаружены неверные знаки, например, при использовании типа в поляprintf строки формата.

См. также

Ссылки

Предоставляйте перегруженный шаблона

Функции библиотеки CRT

Основные понятия

Проверка параметров