Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Birçok eski CRT işlevinin daha yeni ve daha güvenli sürümleri vardır. Güvenli bir işlev varsa, eski, daha az güvenli sürüm kullanım dışı olarak işaretlenir. Yeni sürümde _s
("güvenli") son eki bulunur.
Bu bağlamda "kullanım dışı" ifadesi işlevin kullanılmasının önerilmiyor olduğu anlamına gelir. Bu, işlevin CRT'den kaldırılacağı anlamına gelmez.
Güvenli işlevler güvenlik hatalarını engellemez veya düzeltmez. Bunun yerine, oluştuklarında hataları yakalarlar. Hata koşulları için ek denetimler yapar. Bir hata varsa, bir hata işleyicisi çağırırlar (bkz . Parametre doğrulama).
Örneğin, strcpy
işlevi kopyaladığı dizenin hedef arabellek için çok büyük olup olmadığını söyleyemez. Güvenli karşılığı olan strcpy_s
, arabellek boyutunu parametre olarak alır. Bu nedenle, bir arabellek taşmasının meydana gelip gelmeyeceğini belirleyebilir. 11 karakteri 10 karakterlik arabelleğe kopyalamak için kullanırsanız strcpy_s
, bu sizin hatanızdır; strcpy_s
hatanızı düzeltemezsiniz. Ancak hatanızı algılayabilir ve geçersiz parametre işleyicisini çağırarak sizi bilgilendirebilir.
Kullanımdan kaldırma uyarılarını ortadan kaldırma
Eski ve daha az güvenli işlevler için kullanımdan kaldırma uyarılarını ortadan kaldırmanın çeşitli yolları vardır. En basit yol, _CRT_SECURE_NO_WARNINGS
tanımlamak veya warning
pragmayı kullanmaktır. Ya kullanımdan kaldırma uyarılarını devre dışı bırakır veya onları tetikleyen güvenlik sorunları hala mevcuttur. Kullanımdan kaldırma uyarılarını etkin bırakmak ve yeni CRT güvenlik özelliklerinden yararlanmak daha iyidir.
C++ dilinde kullanımdan kaldırma uyarılarını ortadan kaldırmanın en kolay yolu Güvenli şablon aşırı yüklemelerini kullanmaktır. Aşırı yüklemeler çoğu durumda kullanımdan kaldırma uyarılarını ortadan kaldırır. Kullanım dışı bırakılan işlevlere yapılan çağrıları, işlevlerin güvenli sürümlerine yapılan çağrılarla değiştirir. Örneğin, şu kullanım dışı çağrıyı strcpy
göz önünde bulundurun:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
'ı 1 olarak tanımlamak, strcpy
çağrısını strcpy_s
olarak değiştirerek arabelleğin taşmasını önleyen uyarıyı ortadan kaldırır. Daha fazla bilgi için bkz. Güvenli şablon aşırı yüklemeleri.
Güvenli şablon aşırı yüklemeleri olmadan kullanım dışı bırakılan işlevler için kodunuzu güvenli sürümleri kullanacak şekilde el ile güncelleştirmeyi kesinlikle göz önünde bulundurmalısınız.
Güvenlikle ilgili olmayan kullanımdan kaldırma uyarılarının bir diğer kaynağı da POSIX işlevleridir. POSIX işlev adlarını standart eşdeğerleriyle değiştirin (örneğin, access
'yi _access
olarak değiştirin) veya _CRT_NONSTDC_NO_WARNINGS
'yi tanımlayarak POSIX ile ilgili kullanımdan kaldırma uyarılarını devre dışı bırakın. Daha fazla bilgi için bkz . Uyumluluk.
Diğer güvenlik özellikleri
Güvenlik özelliklerinden bazıları şunlardır:
Parametre Doğrulama
Güvenli işlevler ve bunların güvenli olmayan karşılıklarının çoğu parametreleri doğrular. Doğrulama şunları içerebilir:
-
NULL
değerleri kontrol ediliyor. - Numaralandırılmış değerlerin geçerliliği denetleniyor.
- İntegral değerlerin geçerli aralıklarda olup olmadığını denetleme.
Daha fazla bilgi için bkz . Parametre doğrulama.
Geçersiz parametrelerin işleyicisine geliştirici de erişebilir. bir işlev, uygulamadan onay ve çıkış yapmak yerine geçersiz bir parametreyle karşılaştığında, CRT veya
_set_invalid_parameter_handler
_set_thread_local_invalid_parameter_handler
bu sorunları denetlemenize olanak tanır.-
Boyutlandırılmış Arabellekler
Arabellek boyutunu arabelleğe yazma işlemi yapan herhangi bir güvenli işleve iletmeniz gerekir. Yazma işleminden önce arabelleğin yeterince büyük olduğunu doğrulayan güvenli sürümler vardır. Doğrulama, kötü amaçlı kodun yürütülmesine izin verebilecek tehlikeli arabellek taşması hatalarını önlemeye yardımcı olur. Bu işlevler genellikle bir
errno
hata kodu geri döndürür ve eğer arabellek boyutu çok küçükse geçersiz parametre işleyicisini çağırır. gibigets
giriş arabelleklerinden okuyan işlevler, en büyük boyutu belirtmenizi gerektiren güvenli sürümlere sahiptir.Güvenlikle geliştirilmiş bazı CRT işlevlerinin hata ayıklama sürümleri, kendilerine geçirilen arabelleği özel bir karakterle (0xFE) doldurur. Bu doldurma karakteri, yanlış boyutun fonksiyona iletildiği durumları bulmaya yardımcı olur. Ne yazık ki, bu aynı zamanda performansı da azaltıyor. Performansı geliştirmek için
_CrtSetDebugFillThreshold
kullanarak arabellek doldurmayı devre dışı bırakın. Daha fazla bilgi ve bu davranışa sahip işlevlerin listesi için bkz_CrtSetDebugFillThreshold
. .Null sonlandırma
Potansiyel olarak sonlandırılmamış dizeler bırakan bazı işlevlerin, dizelerin düzgün şekilde null sonlandırılmasını sağlayan daha güvenli sürümleri vardır.
Gelişmiş hata raporlama
Güvenli işlevler, önceden var olan işlevlerle sağlanandan daha fazla hata bilgisi içeren hata kodları döndürür. Güvenli işlevler ve önceden var olan işlevlerin çoğu artık daha iyi hata raporlaması sağlamak için
errno
ayarlar ve genellikle birerrno
kod türü döndürür.Dosya sistemi güvenliği
Güvenli dosya G/Ç API'leri, varsayılan durumda güvenli dosya erişimini destekler.
Windows güvenliği
Güvenli işlem API'leri güvenlik ilkelerini zorunlu kılar ve ACL'lerin belirtilmesine izin verir.
Biçim dizesi söz dizimi denetimi
Örneğin, biçim dizelerinde
printf
yanlış tür alanı karakterleri kullandığınızda geçersiz dizeler algılandı.
Ayrıca bkz.
Parametre doğrulama
Güvenli şablon aşırı yüklemeleri
C çalışma zamanı (CRT) ve C++ Standart Kitaplığı (STL) .lib
dosyaları