Funkce zabezpečení v CRT

Mnoho starých funkcí CRT má novější, bezpečnější verze. Pokud existuje zabezpečená funkce, starší, méně zabezpečená verze se označí jako zastaralá a nová verze má _s příponu ("secure").

V tomto kontextu "zastaralé" znamená, že se použití funkce nedoporučuje. Neznamená to, že je naplánované odebrání funkce z CRT.

Zabezpečené funkce nezabraňují chybám zabezpečení ani je neopraví. Místo toho zachytí chyby, když k nim dojde. Prochová další kontroly chybových podmínek. Pokud dojde k chybě, vyvolá obslužnou rutinu chyb (viz Ověření parametru).

Funkce například nemůže zjistit, jestli je řetězec, který kopíruje, příliš strcpy velký pro cílovou vyrovnávací paměť. Jeho zabezpečený protějšek strcpy_s přebírá velikost vyrovnávací paměti jako parametr. Může tedy určit, jestli dojde k přetečení vyrovnávací paměti. Pokud použijete ke zkopírování 11 znaků do vyrovnávací paměti strcpy_s o 10 znacích, je to chyba z vaší strany, nemůžete strcpy_s chybu opravit. Může ale zjistit vaši chybu a informovat vás vyvoláním neplatné obslužné rutiny parametru.

Eliminace upozornění na vyřazení

Existuje několik způsobů, jak eliminovat upozornění na vyněcování u starších, méně zabezpečených funkcí. Nejjednodušší je jednoduše definovat nebo _CRT_SECURE_NO_WARNINGS použít direktivu _CRT_SECURE_NO_WARNINGS Buď zakáže upozornění na vyřadit, ale problémy se zabezpečením, které tato upozornění způsobily, stále existují. Je lepší nechat povolená upozornění na vyněcování a využívat nové funkce zabezpečení CRT.

Nejjednodušším způsobem, jak to udělat v jazyce C++, je použít přetížení zabezpečené šablony. Tím se v mnoha případech eliminují upozornění na vyněcování tím, že volání zastaralých funkcí nahradíte voláními zabezpečených verzí těchto funkcí. Představte si například toto zastaralé volání strcpy metody :

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

Definováním jako 1 se upozornění eliminuje změnou volání na , což zabrání přetečení _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMESstrcpy vyrovnávací strcpy_s paměti. Další informace najdete v tématu Přetížení zabezpečených šablon.

U těchto zastaralých funkcí bez přetížení zabezpečené šablony byste určitě měli zvážit ruční aktualizaci kódu tak, aby se zabezpečené verze využíly.

Dalším zdrojem upozornění na zahozování, které nesouvisí se zabezpečením, jsou funkce POSIX. Nahraďte názvy funkcí POSIX jejich standardními ekvivalenty (například změňte přístup na _access) nebo definujte upozornění na vyřadit z poSIX. Další informace najdete v tématu Kompatibilita.

Další funkce zabezpečení

Mezi funkce zabezpečení patří:

  • Parameter Validation. Zabezpečené funkce a řada jejich nezabezpečených protějšků ověřují parametry. Ověřování může zahrnovat:

    • Kontroluje hodnoty NULL.
    • Kontrola platnosti výčtových hodnot
    • Kontrola, zda jsou celočíselné hodnoty v platných rozsahech.
  • Další informace najdete v tématu Ověření parametru.

  • Obslužná rutina neplatných parametrů je také přístupná pro vývojáře. Pokud funkce narazí na neplatný parametr místo vyhodnocení a ukončení aplikace, CRT umožňuje zkontrolovat tyto problémy prostřednictvím _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler.

  • Sized Buffers. Velikost vyrovnávací paměti musíte předat jakékoli zabezpečené funkci, která zapisuje do vyrovnávací paměti. Zabezpečené verze před zápisem do vyrovnávací paměti ověří, že je dostatečně velká. To pomáhá zabránit nebezpečným chybám přetečení vyrovnávací paměti, které by mohly umožnit spuštění škodlivého kódu. Tyto funkce obvykle vrátí kód chyby a vyvolaly obslužnou rutinu neplatného parametru, pokud je velikost vyrovnávací errno paměti příliš malá. Funkce, které čtou ze vstupních vyrovnávacích pamětí, například , mají zabezpečené verze, které vyžadují gets zadání maximální velikosti.

  • Null termination. Některé funkce, které opustily potenciálně neukončované řetězce, mají zabezpečené verze, které zajišťují správné ukončení řetězců s hodnotou null.

  • Enhanced error reporting. Zabezpečené funkce vrací kódy chyb s více informacemi o chybách, než bylo k dispozici u již existujících funkcí. Zabezpečené funkce a mnoho z již existujících funkcí teď nastavují a často také vrací typ kódu, aby bylo errnoerrno hlášení chyb lepší.

  • Filesystem security. Rozhraní API pro zabezpečené vstupně-výstupní soubory ve výchozím nastavení podporují zabezpečený přístup k souborům.

  • Windows security. Rozhraní API zabezpečených procesů vynucují zásady zabezpečení a umožňují specifikovat seznamy ACL.

  • Format string syntax checking. Detekuje se neplatné řetězce, například použití nesprávných znaků pole typu ve printf formátovaných řetězcích.

Viz také

Ověření parametru
Přetížení zabezpečené šablony
Soubory knihovny C runtime (CRT) a C++ Standard Library (STL)