Funkcje zabezpieczeń w CRTSecurity Features in the CRT

Wiele starych funkcji CRT ma nowsze, bezpieczniejsze wersje.Many old CRT functions have newer, more secure versions. Jeśli istnieje bezpieczna funkcja, Starsza, mniej bezpieczna wersja jest oznaczona jako przestarzała, a nowa wersja ma _s sufiks ("Secure").If a secure function exists, the older, less secure version is marked as deprecated and the new version has the _s ("secure") suffix.

W tym kontekście "przestarzałe" oznacza użycie funkcji nie jest zalecane.In this context, "deprecated" means using the function's isn't recommended. Nie oznacza to, że funkcja jest zaplanowana do usunięcia z CRT.It doesn't mean the function is scheduled to be removed from the CRT.

Funkcje Secure nie uniemożliwiają lub nie korygują błędów zabezpieczeń.The secure functions don't prevent or correct security errors. Zamiast tego przechwytują błędy, gdy wystąpią.Instead, they catch errors when they occur. Wykonują dodatkowe sprawdzenia dotyczące warunków błędów.They do additional checks for error conditions. Jeśli wystąpi błąd, wywołuje procedurę obsługi błędów (zobacz Walidacja parametrów).If there is an error, they invoke an error handler (see Parameter Validation).

Na przykład strcpy Funkcja nie może stwierdzić, czy ciąg, który jest kopiowany jest zbyt duży dla bufora docelowego.For example, the strcpy function can't tell if the string it's copying is too large for the destination buffer. Jego bezpieczny odpowiednik, strcpy_s , pobiera rozmiar buforu jako parametr.Its secure counterpart, strcpy_s, takes the size of the buffer as a parameter. W ten sposób można określić, czy wystąpiło przepełnienie buforu.So it can determine if a buffer overrun will occur. Jeśli używasz strcpy_s do kopiowania 11 znaków do 10-znakowego bufora, który jest błędem w Twojej części; strcpy_s nie można poprawić błędu.If you use strcpy_s to copy 11 characters into a 10 character buffer, that is an error on your part; strcpy_s can't correct your mistake. Ale może wykryć błąd i poinformować Cię o wywołaniu procedury obsługi nieprawidłowego parametru.But it can detect your error and inform you by invoking the invalid parameter handler.

Eliminowanie ostrzeżeń o zaniechaniuEliminating deprecation warnings

Istnieje kilka sposobów wyeliminowania ostrzeżeń o wycofaniu dla starszych, mniej bezpiecznych funkcji.There are several ways to eliminate deprecation warnings for the older, less secure functions. Najprostszym jest po prostu zdefiniowanie _CRT_SECURE_NO_WARNINGS lub użycie dyrektywy pragma ostrzeżenia .The simplest is simply to define _CRT_SECURE_NO_WARNINGS or use the warning pragma. Spowoduje to wyłączenie ostrzeżeń o zaniechaniu, ale nadal istnieją problemy z zabezpieczeniami, które spowodowały ostrzeżenia.Either will disable deprecation warnings, but the security issues that caused the warnings still exist. Lepiej jest pozostawić ostrzeżenia o wycofaniu i korzystać z nowych funkcji zabezpieczeń CRT.It's better to leave deprecation warnings enabled and take advantage of the new CRT security features.

W języku C++ Najprostszym sposobem na to jest użycie przeciążenia bezpiecznego szablonu.In C++, the easiest way to do that is to use Secure Template Overloads. Spowoduje to wyeliminowanie ostrzeżeń o zaniechaniu w wielu przypadkach przez zamianę wywołań przestarzałych funkcji na wywołania bezpiecznych wersji tych funkcji.This will eliminate deprecation warnings, in many cases, by replacing calls to deprecated functions with calls to secure versions of those functions. Rozważmy na przykład to przestarzałe wywołanie do strcpy :For example, consider this deprecated call to strcpy:

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

Zdefiniowanie _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES jako 1 eliminuje ostrzeżenie przez zmianę strcpy wywołania do strcpy_s , co uniemożliwia przekroczenie buforu.Defining _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES as 1 eliminates the warning by changing the strcpy call to strcpy_s, which prevents buffer overruns. Aby uzyskać więcej informacji, zobacz bezpieczne przeciążenia szablonów.For more information, see Secure Template Overloads.

W przypadku tych przestarzałych funkcji bez zabezpieczeń przeciążeń szablonów należy okresowo rozważyć ręczne aktualizowanie kodu w celu używania bezpiecznych wersji.For those deprecated functions without secure template overloads, you should definitely consider manually updating your code to use the secure versions.

Innym źródłem ostrzeżeń o zaniechaniu, niezwiązanych z zabezpieczeniami, jest funkcja POSIX.Another source of deprecation warnings, unrelated to security, is the POSIX functions. Zamień nazwy funkcji POSIX na ich standardowe odpowiedniki (na przykład zmiana dostępu do _access) lub Wyłącz ostrzeżenia o zaniechaniu związanym z systemem POSIX przez zdefiniowanie _CRT_NONSTDC_NO_WARNINGS .Replace POSIX function names with their standard equivalents (for example, change access to _access), or disable POSIX-related deprecation warnings by defining _CRT_NONSTDC_NO_WARNINGS. Aby uzyskać więcej informacji, zobacz zgodność.For more information, see Compatibility.

Dodatkowe funkcje zabezpieczeńAdditional Security Features

Niektóre funkcje zabezpieczeń obejmują:Some of the security features include:

  • Parameter Validation.Parameter Validation. Zabezpiecz funkcje i wiele niezabezpieczonych odpowiedników, sprawdź poprawność parametrów.Secure functions, and many of their unsecure counterparts, validate parameters. Sprawdzanie poprawności może obejmować:Validation may include:

    • Sprawdzanie wartości null .Checking for NULL values.
    • Sprawdzanie poprawności wyliczanych wartości.Checking enumerated values for validity.
    • Sprawdzanie, czy wartości całkowite znajdują się w prawidłowych zakresach.Checking that integral values are in valid ranges.
  • Aby uzyskać więcej informacji, zobacz Walidacja parametrów.For more information, see Parameter Validation.

  • Program obsługi dla nieprawidłowych parametrów jest również dostępny dla dewelopera.A handler for invalid parameters is also accessible to the developer. Gdy funkcja napotka nieprawidłowy parametr, a nie zostanie potwierdzona i zakończona aplikacja, CRT pozwala sprawdzić te problemy za pośrednictwem _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler.When a function encounters an invalid parameter, instead of asserting and exiting the application, the CRT allows you to check these problems via _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler.

  • Sized Buffers.Sized Buffers. Rozmiar buforu należy przekazać do dowolnej bezpiecznej funkcji, która zapisuje dane w buforze.You must pass the buffer size to any secure function that writes to a buffer. Bezpieczne wersje sprawdzają, czy bufor jest wystarczająco duży przed zapisem w nim.The secure versions validate that the buffer is large enough before writing to it. Pozwala to uniknąć niegroźnych błędów przepełnienia buforu, które mogą pozwolić na wykonanie złośliwego kodu.Which helps avoid dangerous buffer overrun errors that could allow malicious code to execute. Te funkcje zwykle zwracają errno Kod błędu i wywołują procedurę obsługi nieprawidłowego parametru, jeśli rozmiar buforu jest zbyt mały.These functions usually return an errno error code and invoke the invalid parameter handler if the size of the buffer is too small. Funkcje odczytane z buforów wejściowych, takie jak gets , mają bezpieczne wersje, które wymagają określenia maksymalnego rozmiaru.Functions that read from input buffers, such as gets, have secure versions that require you to specify a maximum size.

  • Null termination.Null termination. Niektóre funkcje, które nie mogą być niezakończonymi ciągami, mają bezpieczne wersje, co gwarantuje, że ciągi są prawidłowo zakończone wartością null.Some functions that left potentially non-terminated strings have secure versions, which ensure that strings are properly null-terminated.

  • Enhanced error reporting.Enhanced error reporting. Funkcje Secure zwracają kody błędów z więcej informacji o błędach niż to, które były dostępne w przypadku istniejących funkcji.The secure functions return error codes with more error information than was available with the pre-existing functions. Funkcje Secure i wiele wcześniej istniejących funkcji teraz ustawiają errno i często zwracają errno typ kodu, aby zapewnić lepsze raportowanie błędów.The secure functions and many of the pre-existing functions now set errno and often return an errno code type as well, to provide better error reporting.

  • Filesystem security.Filesystem security. Bezpieczne interfejsy API we/wy plików obsługują bezpieczny dostęp do plików w domyślnym przypadku.Secure file I/O APIs support secure file access in the default case.

  • Windows security.Windows security. Interfejsy API bezpiecznego przetwarzania wymuszają zasady zabezpieczeń i zezwalają na określenie list kontroli dostępu.Secure process APIs enforce security policies and allow ACLs to be specified.

  • Format string syntax checking.Format string syntax checking. Wykryto nieprawidłowe ciągi, na przykład przy użyciu nieprawidłowych znaków pola typu w printf ciągach formatu.Invalid strings are detected, for example, using incorrect type field characters in printf format strings.

Zobacz teżSee also

Sprawdzanie poprawności parametruParameter Validation
Bezpieczne przeciążenia szablonówSecure Template Overloads
Funkcje biblioteki CRTCRT Library Features