crt güvenlik özellikleri
Birçok eski crt işlevleri daha güvenli, daha yeni sürümleri vardır. Güvenli bir işlev varsa, daha eski, daha az güvenli sürüm önerilmeyen olarak işaretlenmiştir ve yeni sürümü olan _s ("güvenli") soneki.
Bu bağlamda, "itiraz" yalnızca bir işlevin kullanımı önerilmez demektir. işlev crt kaldırılacak planlanmıştır göstermez.
Güvenli işlevleri değil önleme veya güvenlik hataları düzeltin; Bunun yerine, oluşabilecek hataları yakalamak. Bunlar hata koşulları için ek denetimler gerçekleştirir ve bunlar bir hata durumunda bir hata işleyicisi çağırmak (bkz: Parametre doğrulama).
Örneğin, strcpy işlevine sahip onu kopyalıyor dize, hedef arabelleği çok büyük olup olmadığını söyleyen bir yolu yoktur. Ancak, güvenli karşılığı strcpy_s, parametre olarak arabellek boyutunu alır, bir arabellek taşması, belirleyebilmeleri ortaya çıkar. Kullanırsanız, strcpy_s bir hatadır; tarafınızla on karakter arabelleği, onbir karakter kopyalamak strcpy_skendi hatasını düzeltmek olamaz ancak, hata algılama ve geçersiz parametre işleyicisi çağırarak bildirin.
Kaldırılması uyarılarını kaldırma
Daha eski, daha az güvenli işlevlerin kaldırılması uyarılarını kaldırmak için çeşitli yollar vardır. En basit basitçe tanımlamaktır _CRT_SECURE_NO_WARNINGS veya warning pragma. Ya da kaldırılması uyarıları devre dışı bırakır, ancak kuşkusuz uyarılar nedeniyle oluşan güvenlik sorunları hala mevcut. Şu ana kadar uyarı etkin ve yeni crt güvenlik özelliklerinden yararlanabilmek kaldırılması bırakmak daha iyidir.
C++'da, bunu yapmanın en kolay yolu kullanmaktır Güvenli şablon aşırı yükleme, çoğu zaman içinde ortadan kaldırılması uyarıları kaldırılmış işlevlerin çağrıları işlevlerin güvenli yeni sürümlere görüşmeleri ile değiştirerek. Örneğin, bu itiraz çağrısına göz önünde strcpy:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Tanımlama _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 değiştirerek uyarı ortadan kaldırır gibi strcpy çağrısı strcpy_s, arabellek taşmaları engeller. Daha fazla bilgi için bkz. Güvenli şablon aşırı yükleme.
Güvenli şablon aşırı olmadan kaldırılmış bu işlevlerin kodunuzu güvenli sürümlerini kullanmak üzere el ile güncelleştirme kesinlikle düşünmelisiniz.
Başka bir güvenlik için ilgisi olmayan kaldırılması uyarıları POSIX işlevleri kaynağıdır. Kendi standart eşdeğerleriyle POSIX işlev adları (örneğin, erişim için _access), veya tanımlayarak kaldırılması POSIX ile ilgili uyarıları devre dışı _CRT_NONSTDC_NO_WARNINGS. Daha fazla bilgi için bkz. Deprecated CRT Functions.
Ek güvenlik özellikleri
Güvenlik özelliklerinden bazıları şunlardır:
Parameter Validation. Hem güvenli işlevleri ve işlevlerin çoğu önceden varolan sürümlerinde crt işlevleri geçirilen parametreleri doğrulanır. Bu doğrulamaları şunları içerir:
Denetleme NULL değerleri geçirilen işlevleri.
Numaralandırılmış değerlerden geçerliliğini denetleme.
Tam sayı değerleri geçerli aralık içinde olup olmadığını denetleme.
Daha fazla bilgi için bkz. Parametre doğrulama.
Geçersiz parametreler için bir işleyici geliştiriciler için erişilebilir. Bir mekanizmanın ve uygulamadan çıkmak yerine geçersiz bir parametre karşılaşıldığında crt ile bu sorunları denetlemek için bir yol sağlar _set_invalid_parameter_handler işlevi.
Sized Buffers. Güvenli işlevleri arabellek boyutu bir arabelleğe yazma herhangi bir işleve geçirilmesi gerekir. Güvenli sürümleri, kötü amaçlı kod yürütmesine izin verebilir tehlikeli arabellek taşma hataları önlemenize yardımcı olma yazmadan önce arabellek yeterince büyük olduğunu doğrulayın. Bu işlevler genellikle dönmek bir errno hata kodunu yazın ve arabellek boyutu çok küçük ise geçersiz parametre işleyiciyi çağırır. Giriş önbelleklerden gibi okunması işlevleri gets, en büyük boyutu belirtmek gerekli olan güvenli sürümlere sahip.
Null termination. Dizeleri olması güvenli versiyonlar sol potansiyel olmayan-dizelerin bazı işlevleri, null düzgün sona erdi.
Enhanced error reporting. Güvenli işlevleri hata kodları ile önceden varolan işlevler kullanılabilir olandan daha fazla hata bilgisi döndürür. Güvenli işlevleri ve önceden varolan işlevlerin çoğunu şimdi ayarlamak errno ve genellikle bir errno kod türü de, daha iyi hata raporlama sağlamak için.
Filesystem security. Güvenli dosya g/Ç API desteği güvenli dosya erişim varsayılan durumda.
Windows security. Güvenli işlem API'leri güvenlik ilkelerini ve belirtilecek ACL izin verir.
Format string syntax checking. Geçersiz dize algılanır, örneğin, yanlış türde alan karakterleri kullanarak printf dize biçimi.