Aracılığıyla paylaş


Güvenlikle İlgili Dikkat Edilmesi Gerekenler: Microsoft Windows Denetimleri

Bu konu, Windows denetimleriyle ilgili güvenlik konuları hakkında bilgi sağlar. Bu konudaki bilgiler, güvenlik sorunları hakkında bilmeniz gereken her şeyi sağlamaz; bunu bu teknoloji alanı için bir başlangıç noktası ve başvuru olarak kullanın.

Bilgisayarlar arasındaki bağlantı yaygın olarak görülür; bir geliştiricinin en önemli endişesi uygulama güvenliği olmalıdır. Aşağıdaki bölümlerde Windows denetimlerini programlama sırasında dikkate alınması gereken bazı olası güvenlik sorunları açıklanmıştır.

Null Sonlandırılan Denetim İletileri

Denetim iletilerinin ve makroların çoğunda dize parametreleri vardır. Bu iletiler genellikle giriş dizelerini doğrulamaz, özellikle de sonlandırıcı '\0'olup olmadığını denetlemez. Parametre olarak dize kullanan bir iletiyi çağırdığınızda, dizenin null olarak sonlandırıldığını açıkça belirtin.

Dize Kullanımı

Windows denetimlerini programladığınızda, dizeleri işlemek gerekir. Neredeyse tüm denetimler metin eklenmesini gerektirir. Örneğin, bir liste kutusunu doldurmak için denetime dizeler yüklemeniz gerekir. Dizelerin yanlış kullanılması genellikle arabellek taşmalarına neden olduğundan, bu güvenlik riskini önlemek için önlemler alın.

Arabellek taşmalarıyla ilgili daha fazla bilgi için bkz. Writing Secure Code by Michael Howard and David LeBlanc, Microsoft Press, 2002 ve Best Practices for the Security API'leri.

Giriş Doğrulama

Aşağıdaki denetim iletileri güvenlik sorunları sunabilir.

Metin uzunluğu ve metnin görüntülendiği veya kullanıldığı saat için çağrı arasında metin değişirse, arabellek taşması oluşabilir. Bunu önlemek için, kullanmadan önce dizeyi doğrulamanız gerekir. Buna ek olarak, CB_GETLBTEXT, TB_GETBUTTONTEXTve TTM_GETTEXTmetinleri alan iletilerin arabellek taşması olasılığını gösteren arabellek boyutu parametresi yoktur.

CB_GETLBTEXT veya SB_GETTEXTkullandığınızda, arabellek boyutunu almak için önce CB_GETLBTEXTLEN veya SB_GETTEXTLENGTH çağırmalısınız. TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGve TVM_GETISEARCHSTRINGbu iletilerden bazıları, dizeyi almak için ileti çağrılmadan önce dizenin uzunluğunu elde etmek için NULL parametre değeriyle çağrılabilir.

Özellikle dikkat etmelisiniz bir ileti durum çubuğu SB_GETTIPTEXT iletidir. Bu ileti, alınacak dizenin uzunluğunu sorgulamak için hiçbir yol sağlamaz.

Parola Kullanımı

Parola korumalı düzenleme denetimleri (ES_PASSWORD stili) kullanıyorsanız, kullanıcının parolasının bellekte açığa çıkarılmasını önlemek için, alınan metni içeren arabellek en kısa sürede sıfır olarak ayarlanmalıdır.

Güvenlik Uyarıları

Aşağıdaki tabloda, yanlış kullanıldığında uygulamalarınızın güvenliğini tehlikeye atabilecek özellikler listelenmiştir. Burada listelenen iletiler arabellek boyutunu belirten bir parametre sağlamaz.

Özellik Azaltma
DlgDirListComboBox İşlev tarafından kullanılan arabelleğin yazılabilir ve null olarak sonlandırılabilir olduğundan emin olun.
CB_GETLBTEXT Arabelleğin boyutunu almak için CB_GETLBTEXTLEN çağırın ve ardından dizeyi almak için CB_GETLBTEXT çağırın.
LVM_GETISEARCHSTRING arabellek boyutunu almak için NULL parametre değeriyle iletiyi çağırın ve sonra dizeyi almak için iletiyi ikinci kez çağırın.
SB_GETTEXT Arabelleğin boyutunu almak için SB_GETTEXTLENGTH çağırın ve ardından dizeyi almak için SB_GETTEXT çağırın.
TB_GETBUTTONTEXT arabellek boyutunu almak için NULL parametre değeriyle iletiyi çağırın ve sonra dizeyi almak için iletiyi ikinci kez çağırın.
TTM_GETTEXT Bu ileti, arabelleğin boyutunu bilmeniz veya belirtmeniz için bir yol sağlamaz.
TVM_GETISEARCHSTRING Arabellek boyutunu almak için bir NULL parametre değeri geçirerek iletiyi çağırın ve sonra dizeyi almak için iletiyi ikinci kez çağırın.

 

Diğer Kaynaklar

Microsoft Güvenlik

Güvenlik

Microsoft Güvenlik Yanıt Merkezi

Güvenlik API'leri için En İyi Yöntemler