Co to jest opcja sprawdzania cyklu rozwojowego zabezpieczeń w programie Visual Studio?

81

Używam Visual Studio 2013 Preview, chociaż jestem pewien, że widziałem to we wcześniejszych wersjach. Podczas tworzenia nowego projektu za pomocą kreatora wybieram C ++, aplikację konsoli Win32 i istnieje opcja włączenia kontroli cyklu życia zabezpieczeń w moim projekcie. Czy ktoś mógłby dokładnie wyjaśnić, co ta opcja robi z moim kodem / projektem?

Neil Kirk
źródło

Odpowiedzi:

71

/sdlPrzełącznik jest opisany tutaj . Przekształca niektóre ostrzeżenia w błędy, które nie mają wpływu na kod. Co więcej, stosuje /GSsprawdzanie bardziej agresywnie.

Nie oczekuj od tego zbyt wiele. Microsoft SDL to naprawdę obejście dla programowania w języku C w stylu lat 80-tych. Nawet jeśli używasz XX-wiecznego C ++, nie potrzebujesz tego. Np. operator+(std::string, std::string)Jest bezpieczny i przenośny. W przeciwieństwie do tego rozwiązanie Microsoft SDL nie jest przenośne ani bezpieczne - /GSchodzi o znalezienie błędów w obsłudze napisów C w czasie wykonywania i przerwanie programu, ograniczając konsekwencje, ale nie czyniąc go bezpiecznym.

MSalters
źródło
Ciągi nie są jedyną przyczyną błędów pamięci. / sdl może pomóc między innymi w zidentyfikowaniu użycia zjednoliconych zmiennych.
Jørgen Fogh
@ JørgenFogh: Opisujesz ostrzeżenie C4700, do którego nie potrzebujesz / sdl. To ostrzeżenie poziomu 1; musisz wyłączyć wszystkie ostrzeżenia, zanim C4700 zniknie. Jeśli twoi programiści to robią, masz problemy, których SDL również nie rozwiąże.
MSalters
Pamiętam, że czytałem gdzieś, że ostrzeżenia stają się bardziej szczegółowe, ponieważ / sdl włącza bardziej szczegółową analizę statyczną. Nie pamiętam jednak, gdzie to przeczytałem.
Jørgen Fogh
3
Wykonuje ograniczoną dezynfekcję wskaźnika. W wyrażeniach, które nie obejmują wyłuskiwania, oraz w typach, które nie mają elementu destruktora zdefiniowanego przez użytkownika, odwołania do wskaźników są ustawiane na nieprawidłowy adres po wywołaniu funkcji delete. Pomaga to zapobiec ponownemu wykorzystaniu przestarzałych odwołań do wskaźników. Wykonuje inicjalizację elementu członkowskiego klasy. Automatycznie inicjuje wszystkie elementy członkowskie klasy do zera podczas tworzenia wystąpienia obiektu (przed uruchomieniem konstruktora). Pomaga to zapobiegać używaniu niezainicjowanych danych skojarzonych z elementami członkowskimi klasy, których konstruktor nie inicjuje jawnie.
Motes
1
@Motes: Powinieneś był napisać to jako osobną odpowiedź. Jest to o wiele bardziej pomocne niż (szydercza) odpowiedź, której dotyczy ten komentarz. Dodatkowo podany tam link jest zły. To powinno być to .
ahmd0
2

Cykl rozwoju zabezpieczeń firmy Microsoft to proces opracowywania oprogramowania stosowany i proponowany przez firmę Microsoft w celu zmniejszenia kosztów utrzymania oprogramowania i zwiększenia niezawodności oprogramowania w zakresie błędów związanych z bezpieczeństwem oprogramowania.

Te mogą być pomocne:

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
źródło
10
To dużo materiału. Co tak naprawdę robi zaznaczenie opcji z moim kodem?
Neil Kirk