Visual Studio'daki Güvenlik Geliştirme Yaşam Döngüsü Denetimleri seçeneği nedir?


81

Visual Studio 2013 Preview kullanıyorum, ancak önceki sürümlerde gördüğüme eminim. Sihirbazı kullanarak yeni bir proje oluştururken, C ++, Win32 Konsol Uygulaması'nı seçiyorum ve projemde Güvenlik Geliştirme Yaşam Döngüsü Kontrollerini etkinleştirme seçeneği var. Birisi bu seçeneğin koduma / projeme tam olarak ne yaptığını açıklayabilir mi?

Yanıtlar:


71

/sdlAnahtar açıklanmıştır burada . Bazı uyarıları, kodunuzu etkilemeyen hatalara dönüştürür. Ayrıca, /GSçeki daha agresif bir şekilde uygular .

Ondan çok fazla şey beklemeyin. Microsoft SDL, 1980'lerin tarzı C programlaması için gerçekten bir geçici çözümdür. 20. yüzyıl C ++ kullanıyor olsanız bile, buna ihtiyacınız yok. Örneğin operator+(std::string, std::string)hem güvenli hem de taşınabilir. Microsoft'un buradaki SDL çözümü, bunun tersine, taşınabilir veya güvenli değildir - arkasındaki fikir /GS, çalışma zamanında C dizesi işleme ile ilgili hataları bulmak ve programı iptal ederek sonuçları sınırlandırmak, ancak güvenli hale getirmemek.


Dizeler bellek hatalarının tek nedeni değildir. / sdl, diğer şeylerin yanı sıra, birimleştirilmiş değişkenlerin kullanımını belirlemenize yardımcı olabilir.
Jørgen Fogh

@ JørgenFogh: / SDL'ye ihtiyacınız olmayan C4700 uyarısını tanımlıyorsunuz. Seviye-1 uyarısıdır; C4700 kaybolmadan önce tüm uyarıları kapatmanız gerekir . Geliştiricileriniz bunu yapıyorsa, SDL'nin de çözemeyeceği sorunlarınız var demektir.
MSalters

/ Sdl daha ayrıntılı bir statik analize geçtiği için uyarıların daha ayrıntılı hale geldiğini bir yerde okuduğumu hatırlıyorum. Yine de nerede okuduğumu hatırlayamıyorum.
Jørgen Fogh

3
Sınırlı işaretçi temizliği gerçekleştirir. Başvurular içermeyen ifadelerde ve kullanıcı tanımlı yıkıcı içermeyen türlerde, işaretçi başvuruları, silme çağrısından sonra geçersiz bir adrese ayarlanır. Bu, eski işaretçi referanslarının yeniden kullanılmasını önlemeye yardımcı olur. Sınıf üyesi başlatmayı gerçekleştirir. Nesne somutlaştırmasında tüm sınıf üyelerini otomatik olarak sıfır olarak başlatır (yapıcı çalışmadan önce). Bu, oluşturucunun açıkça başlatmadığı sınıf üyeleriyle ilişkili başlatılmamış verilerin kullanılmasını önlemeye yardımcı olur.
Motes

1
@ Notlar: Bunu ayrı bir cevap olarak yazmalıydın. Bu, bu yorumun yerleştirildiği (alaycı) bir cevaptan çok daha faydalıdır. Ek olarak orada verilen bağlantı kötü. Bu olmalı .
ahmd0

2

Microsoft Güvenlik Geliştirme Yaşam Döngüsü, yazılım bakım maliyetlerini azaltmak ve yazılım güvenliğiyle ilgili hatalarla ilgili yazılımın güvenilirliğini artırmak için Microsoft tarafından kullanılan ve önerilen bir yazılım geliştirme sürecidir.

Bunlar yardımcı olabilir:

http://download.microsoft.com/download/B/5/A/B5A89F4C-D591-4AAB-BF45-D818D80527B6/SDLServices2011.pdf

http://msdn.microsoft.com/en-us/library/windows/desktop/84aed186-1d75-4366-8e61-8d258746bopq.aspx


10
Bu çok fazla malzeme. Seçeneği kontrol etmek koduma gerçekte ne yapar?
Neil Kirk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.