Sdílet prostřednictvím


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říklad getsmají 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 vracely errno 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