Was ist die Option Security Development Lifecycle Checks in Visual Studio?

81

Ich verwende Visual Studio 2013 Preview, obwohl ich sicher bin, dass ich es in früheren Versionen gesehen habe. Wenn ich mit dem Assistenten ein neues Projekt erstelle, wähle ich C ++, Win32 Console Application, und es gibt eine Option zum Aktivieren der Sicherheitsentwicklungs-Lebenszyklusprüfungen für mein Projekt. Könnte jemand genau erklären, was diese Option mit meinem Code / Projekt macht?

Neil Kirk
quelle

Antworten:

71

Der /sdlSchalter wird hier beschrieben . Einige Warnungen werden in Fehler umgewandelt, die sich nicht auf Ihren Code auswirken. Darüber hinaus wird der /GSScheck aggressiver angewendet.

Erwarten Sie nicht zu viel davon. Die Microsoft SDL ist wirklich eine Problemumgehung für die C-Programmierung im Stil der 1980er Jahre. Selbst wenn Sie C ++ des 20. Jahrhunderts verwenden, brauchen Sie es nicht. ZB operator+(std::string, std::string)ist sowohl sicher als auch tragbar. Im Gegensatz dazu ist die SDL-Lösung von Microsoft hier weder portabel noch sicher. Die Idee dahinter /GSbesteht darin, zur Laufzeit Fehler bei der Behandlung von C-Zeichenfolgen zu finden und das Programm abzubrechen, wodurch die Konsequenzen begrenzt, aber nicht sicher gemacht werden.

MSalters
quelle
Strings sind nicht die einzige Ursache für Speicherfehler. Mit / sdl können Sie unter anderem die Verwendung von unitialisierten Variablen identifizieren.
Jørgen Fogh
@ JørgenFogh: Sie beschreiben die C4700-Warnung, für die Sie / sdl nicht benötigen. Es ist eine Warnung der Stufe 1; Sie müssen alle Warnungen deaktivieren, bevor C4700 verschwindet. Wenn Ihre Entwickler dies tun, haben Sie Probleme, die SDL auch nicht lösen kann.
MSalters
Ich erinnere mich, dass ich irgendwo gelesen habe, dass die Warnungen detaillierter werden, weil / sdl eine detailliertere statische Analyse aktiviert. Ich kann mich nicht erinnern, wo ich es gelesen habe.
Jørgen Fogh
3
Führt eine eingeschränkte Zeigerbereinigung durch. In Ausdrücken, die keine Dereferenzen beinhalten, und in Typen, die keinen benutzerdefinierten Destruktor haben, werden Zeigerreferenzen nach einem Aufruf zum Löschen auf eine ungültige Adresse gesetzt. Dies hilft, die Wiederverwendung veralteter Zeigerreferenzen zu verhindern. Führt die Initialisierung der Klassenmitglieder durch. Initialisiert alle Klassenmitglieder bei der Objektinstanziierung automatisch auf Null (bevor der Konstruktor ausgeführt wird). Dies verhindert, dass nicht initialisierte Daten verwendet werden, die Klassenmitgliedern zugeordnet sind, die der Konstruktor nicht explizit initialisiert.
Motes
1
@Motes: Du hättest es als separate Antwort schreiben sollen. Dies ist weitaus hilfreicher als eine (spöttische) Antwort, für die dieser Kommentar platziert ist. Außerdem ist der dort angegebene Link schlecht. Es sollte das sein .
ahmd0
2

Der Microsoft Security Development Lifecycle ist ein Softwareentwicklungsprozess, der von Microsoft verwendet und vorgeschlagen wird, um die Softwarewartungskosten zu senken und die Zuverlässigkeit von Software in Bezug auf Software-Sicherheitsfehler zu erhöhen.

Diese können hilfreich sein:

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

Mohammad Izady
quelle
10
Das ist viel Material. Was bewirkt das Aktivieren der Option für meinen Code?
Neil Kirk