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á. Nová verze má příponu _s
("secure").
V tomto kontextu "zastaralé" znamená, že použití funkce se nedoporučuje. Neznamená to, že funkce bude odebrána z CRT.
Zabezpečené funkce nezabrání nebo opraví chyby zabezpečení. Místo toho zachytí chyby, když dojde k jejich výskytu. Provádějí dodatečné kontroly chybových podmínek. Pokud dojde k chybě, vyvolá obslužnou rutinu chyby (viz ověření parametru).
Funkce například nemůže zjistit, jestli je řetězec, který kopíruje, strcpy
příliš 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 strcpy_s
ke zkopírování 11 znaků do vyrovnávací paměti 10 znaků, jedná se o chybu ve vaší části. strcpy_s
Chybu nemůžete opravit. Ale může zjistit vaši chybu a informovat vás vyvoláním neplatné obslužné rutiny parametru.
Odstranění upozornění na vyřazení
Existuje několik způsobů, jak eliminovat upozornění na vyřazení starších, méně zabezpečených funkcí. Nejjednodušší je jednoduše definovat _CRT_SECURE_NO_WARNINGS
nebo použít direktivu warning
pragma. Buď zakažte upozornění na vyřazení, ale problémy se zabezpečením, které způsobily upozornění, stále existují. Je lepší nechat upozornění vyřazení povolená a využívat nové funkce zabezpečení CRT.
V jazyce C++ je nejjednodušším způsobem, jak eliminovat upozornění na vyřazení, použít přetížení šablony zabezpečení. Přetížení eliminují upozornění vyřazení v mnoha případech. Nahrazují volání zastaralých funkcí voláními zabezpečených verzí funkcí. Zvažte například toto zastaralé volání strcpy
:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Definování _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
jako 1 eliminuje upozornění změnou strcpy
volání na strcpy_s
, což brání přetečení vyrovnávací paměti. Další informace naleznete v tématu Přetížení šablon zabezpečení.
U zastaralých funkcí bez přetížení zabezpečených šablon byste měli určitě zvážit ruční aktualizaci kódu tak, aby používal zabezpečené verze.
Dalším zdrojem upozornění vyřazení, nesouvisející se zabezpečením, je funkce POSIX. Názvy funkcí POSIX nahraďte jejich standardními ekvivalenty (například změnou access
na _access
) nebo zakažte upozornění vyřazení související s POSIX definováním _CRT_NONSTDC_NO_WARNINGS
. Další informace naleznete v tématu Kompatibilita.
Další funkce zabezpečení
Mezi funkce zabezpečení patří:
Ověřování parametrů
Zabezpečené funkce a řada jejich nezabezpečených protějšků ověřuje parametry. Ověření může zahrnovat:
NULL
Kontrola hodnot- Kontrola platnosti výčtových hodnot
- Kontrola, že celočíselné hodnoty jsou v platných oblastech.
Další informace najdete v tématu Ověření parametru.
Obslužná rutina pro neplatné parametry je také přístupná pro vývojáře. Když funkce narazí na neplatný parametr, namísto uplatnění a ukončení aplikace, CRT umožňuje zkontrolovat tyto problémy prostřednictvím
_set_invalid_parameter_handler
nebo_set_thread_local_invalid_parameter_handler
.Vyrovnávací paměti velikosti
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ěřují, že je vyrovnávací paměť dostatečně velká. Ověřování pomáhá vyhnout se 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 vrací kód chyby a vyvolají neplatnou
errno
obslužnou rutinu parametru, pokud je velikost vyrovnávací paměti příliš malá. Funkce, které čtou ze vstupních vyrovnávacích pamětí, napříkladgets
mají zabezpečené verze, které vyžadují, abyste zadali maximální velikost.Ukončení null
Některé funkce, které potenciálně neukončované řetězce opustily, mají zabezpečené verze, které zajišťují, že řetězce jsou správně ukončeny s hodnotou null.
Vylepšené zasílání zpráv o chybách
Zabezpečené funkce vrací kódy chyb s více informacemi o chybách, než byly k dispozici u již existujících funkcí. Zabezpečené funkce a řada předpřipravených funkcí teď nastavily
errno
a často vracelyerrno
i typ kódu, aby poskytovaly lepší hlášení chyb.Zabezpečení systému souborů
Zabezpečená rozhraní API pro vstupně-výstupní operace souborů podporují zabezpečený přístup k souborům ve výchozím případě.
Zabezpečení Windows
Zabezpečená rozhraní API procesu vynucují zásady zabezpečení a umožňují zadat seznamy ACL.
Kontrola syntaxe řetězce formátu
Při použití nesprávných znaků pole typu ve
printf
formátových řetězcích se zjistí neplatné řetězce.
Viz také
Ověření parametru
Přetížení zabezpečených šablon
Soubory C runtime (CRT) a standardní knihovny C++ (STL) .lib