Visual Studio의 보안 개발 수명주기 검사 옵션은 무엇인가요?


81

이전 버전에서 본 적이 있지만 Visual Studio 2013 Preview를 사용하고 있습니다. 마법사를 사용하여 새 프로젝트를 만들 때 C ++, Win32 콘솔 응용 프로그램을 선택하고 프로젝트에서 보안 개발 수명주기 검사를 활성화하는 옵션이 있습니다. 누군가이 옵션이 내 코드 / 프로젝트에 대해 정확히 무엇을 설명 할 수 있습니까?

답변:


71

여기에서 /sdl스위치에 대해 설명 합니다 . 일부 경고를 오류로 전환하여 코드에 영향을주지 않습니다. 또한 /GS수표를보다 적극적으로 적용합니다 .

너무 많은 것을 기대하지 마십시오. Microsoft SDL은 실제로 1980 년대 스타일 C 프로그래밍의 해결 방법입니다. 20 세기 C ++를 사용하더라도 필요하지 않습니다. 예를 들어 operator+(std::string, std::string)안전하고 휴대 가능합니다. 대조적으로 마이크로 소프트의 SDL 솔루션은 이식성이없고 안전하지도 않습니다. 배후의 아이디어 /GS는 런타임에 C 문자열 처리로 오류를 찾고 프로그램을 중단하여 결과를 제한하지만 안전하지 않게 만드는 것입니다.


문자열이 메모리 오류의 유일한 원인은 아닙니다. / sdl은 무엇보다도 단일화 된 변수의 사용을 식별하는 데 도움이 될 수 있습니다.
Jørgen Fogh

@ JørgenFogh : / sdl이 필요없는 C4700 경고를 설명하고 있습니다. 레벨 1 경고입니다. 당신은 해제해야 모든 C4700이 사라지기 전에 경고를. 개발자가 그렇게한다면 SDL로도 해결할 수없는 문제가 있습니다.
MSalters

/ sdl이 더 자세한 정적 분석을 사용하기 때문에 경고가 더 자세히 표시된다는 내용을 읽은 기억이 있습니다. 그래도 어디서 읽었는지 기억이 나지 않습니다.
Jørgen Fogh

3
제한된 포인터 삭제를 수행합니다. 역 참조가 포함되지 않은 식과 사용자 정의 소멸자가없는 형식에서 포인터 참조는 삭제 호출 후 유효하지 않은 주소로 설정됩니다. 이것은 부실 포인터 참조의 재사용을 방지하는 데 도움이됩니다. 클래스 멤버 초기화를 수행합니다. 생성자가 실행되기 전에 개체 인스턴스화시 모든 클래스 멤버를 자동으로 0으로 초기화합니다. 이렇게하면 생성자가 명시 적으로 초기화하지 않는 클래스 멤버와 연결된 초기화되지 않은 데이터의 사용을 방지 할 수 있습니다.
Motes 2016

1
@Motes : 별도의 답변으로 작성 했어야합니다. 이것은이 주석이 배치 된 (파생적인) 답변보다 더 유용합니다. 또한 주어진 링크가 잘못되었습니다. 이 여야합니다 .
ahmd0

2

Microsoft 보안 개발 수명주기는 소프트웨어 유지 관리 비용을 줄이고 소프트웨어 보안 관련 버그와 관련된 소프트웨어의 안정성을 높이기 위해 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
그것은 많은 자료입니다. 옵션 확인은 실제로 내 코드에 어떤 영향을 줍니까?
Neil Kirk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.