Що таке варіант перевірки життєвого циклу розробки безпеки у Visual Studio?


81

Я використовую Visual Studio 2013 Preview, хоча я впевнений, що бачив це в попередніх версіях. Створюючи новий проект за допомогою майстра, я вибираю C ++, консольну програму Win32, і є можливість увімкнути перевірки життєвого циклу розробки безпеки для мого проекту. Хтось може пояснити, що саме ця опція робить з моїм кодом / проектом?

Відповіді:


71

/sdlПеремикач описаний тут . Деякі попередження перетворюються на помилки, що не впливає на ваш код. Крім того, він застосовує /GSперевірку більш агресивно.

Не чекайте від нього занадто багато. Microsoft SDL - справді обхідний шлях для програмування на стилі C 1980-х років. Навіть якщо ви використовуєте С ++ 20 століття, він вам не потрібен. Наприклад, operator+(std::string, std::string)це і безпечно, і портативно. Тут рішення Microsoft SDL, на відміну від цього, не є портативним і не безпечним - ідея /GSполягає в тому, щоб знаходити помилки при обробці рядків C під час виконання та переривати програму, обмежуючи наслідки, але не роблячи її безпечною.


Рядки - не єдина причина помилок пам'яті. / sdl може допомогти вам визначити використання неіціалізованих змінних, серед іншого.
Йорген Фог

@ JørgenFogh: Ви описуєте попередження C4700, для якого вам не потрібно / sdl. Це попередження рівня 1; Вам потрібно вимкнути всі попередження, перш ніж C4700 зникне. Якщо ваші розробники роблять це, у вас є проблеми, які SDL теж не вирішить.
MSalters 03.03.16

Пам’ятаю, я десь читав, що попередження стають більш детальними, оскільки / sdl вмикає більш детальний статичний аналіз. Хоча я не пам’ятаю, де це читав.
Йорген Фог

3
Виконує обмежену дезінфекцію покажчиків. У виразах, які не передбачають перенаправлення, та в типах, що не мають визначеного користувачем деструктора, посилання на вказівник встановлюються на недійсні адреси після виклику для видалення. Це допомагає запобігти повторному використанню застарілих посилань на вказівник. Виконує ініціалізацію члена класу. Автоматично ініціалізує всі члени класу до нуля при екземплярі об’єкта (до запуску конструктора). Це допомагає запобігти використанню неініціалізованих даних, пов’язаних із членами класу, які конструктор не ініціює явно.
Мотес,

1
@Motes: Вам слід було написати це як окрему відповідь. Це набагато корисніше, ніж (глузлива) відповідь, на яку розміщений цей коментар. До того ж посилання, вказане там, є поганим. Це має бути це .
ahmd0

2

Життєвий цикл розробки системи безпеки Microsoft - це процес розробки програмного забезпечення, який використовується і пропонується корпорацією Майкрософт для зменшення витрат на обслуговування програмного забезпечення та підвищення надійності програмного забезпечення стосовно помилок, пов’язаних із безпекою програмного забезпечення.

Вони можуть бути корисними:

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
Це багато матеріалу. Що насправді робить перевірка опції для мого коду?
Ніл Кірк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.