Visual Studioのセキュリティ開発ライフサイクルチェックオプションとは何ですか?


81

Visual Studio 2013プレビューを使用していますが、以前のバージョンで見たことがあると思います。ウィザードを使用して新しいプロジェクトを作成するときは、C ++、Win32コンソールアプリケーションを選択し、プロジェクトでセキュリティ開発ライフサイクルチェックを有効にするオプションがあります。誰かがこのオプションが私のコード/プロジェクトに何をするのかを正確に説明できますか?

回答:


71

ここで/sdlスイッチについて説明します。一部の警告がエラーに変わりますが、コードには影響しません。さらに、/GSチェックをより積極的に適用します。

あまり期待しないでください。Microsoft SDLは、実際には1980年代のスタイルCプログラミングの回避策です。20世紀のC ++を使用していても、必要ありません。たとえばoperator+(std::string, std::string)、安全でポータブルです。対照的に、ここでのMicrosoftのSDLソリューションは移植性がなく、安全でもありません。背後にある考え方/GSは、実行時にC文字列処理のエラーを見つけてプログラムを中止し、結果を制限しますが、安全にはしないことです。


メモリエラーの原因は文字列だけではありません。/ sdlは、特にユニット化された変数の使用を識別するのに役立ちます。
ヨルゲンFogh

@JørgenFogh:/ sdlを必要としないC4700警告について説明しています。これはレベル1の警告です。C4700が消える前に、すべての警告をオフにする必要があります。開発者がそうしていると、SDLでも解決できない問題が発生します。
MSalters 2016

/ sdlがより詳細な静的分析をオンにするため、警告がより詳細になることをどこかで読んだことを覚えています。どこで読んだのか思い出せません。
ヨルゲンFogh

3
限定ポインターサニタイズを実行します。逆参照を含まない式やユーザー定義のデストラクタがない型では、deleteの呼び出し後に、ポインタ参照が無効なアドレスに設定されます。これは、古いポインタ参照の再利用を防ぐのに役立ちます。クラスメンバーの初期化を実行します。オブジェクトのインスタンス化時に(コンストラクターが実行される前に)、すべてのクラスメンバーを自動的にゼロに初期化します。これにより、コンストラクターが明示的に初期化しないクラスメンバーに関連付けられた初期化されていないデータの使用を防ぐことができます。
モート2016年

1
@モート:別の答えとして書くべきだった。これは、このコメントの(決定的な)回答よりもはるかに役立ちます。さらに、そこに与えられたリンクは悪いです。これであるはずです。
ahmd0 2018年

2

マイクロソフトセキュリティ開発ライフサイクルは、ソフトウェアメンテナンスコストを削減し、ソフトウェアセキュリティ関連のバグに関するソフトウェアの信頼性を高めるためにマイクロソフトが使用および提案するソフトウェア開発プロセスです。

これらは役立つかもしれません:

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
それはたくさんの資料です。オプションをチェックすると、実際にコードに何が起こりますか?
ニールカーク2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.