ネイティブ C++ と混合されていない C++/CLI ソリューションがあります (ただし、このタイプもあります)。これは 3 つのプロジェクトで構成されており、そのうちの 2 つは私の質問に関連しています。
1 つ目は静的ライブラリ (.lib) で、Acitve Diretytory の問題を扱います。
2 つ目は、他のプロジェクトに依存する実行可能なメイン プロジェクト (.exe) です。
私は Visual Studio 2012 を初めて使用し、コード分析などのツールの利点を利用したいと考えています。ソリューションに対してコード分析を実行すると、いくつかの CA2122 警告が明らかになります。
CA2122 リンク要求のあるメソッドを間接的に公開しないでください
私はこの警告に関連するセキュリティ上の懸念を理解しており、対処方法も理解していたと思いますが、このセキュリティ関連のことも初めて知りました。この警告は、ソリューション全体を調べたときの Active Directory コードに関連していますが、lib-project だけを調べても表示されず、すべて問題ないように見えます。
今問題の核心に:
SecuritySafeCritical
属性で警告されるすべてのメソッドをマークしようとしました
--> no changes, same warnings- アセンブリ全体を としてマークし、問題のあるメソッドに
SecurityCritical
を追加することで、別のプロジェクトでこの警告を解決しました。アセンブリに as のマークを付けて をSecuritySafeCritical
追加してもこの問題には影響しないため、これは機能しません。(この種のプロジェクトを時代遅れにするヘッダーファイルでコードを完全にする必要があるように見えるため、マネージドスタティックライブラリでは* .cppが時代遅れのように見えることを私は知っています...しかし、すべての小さなプロジェクトに.dllを持たせたくありませんまた、一部のルーズなヘッダー ファイルを使用したり、他のリージョンと混合したりするのではなく、このようなものを独自のプロジェクトにカプセル化したいと考えています)AssemblyInfo.cpp
SecurityCritical
- その後、メイン プロジェクトのアセンブリ全体を としてマークしようとしまし
SecurityTransparent
た。これまでのところ、このマークされたコードはまたはコードSecuritySafeCritical
で呼び出すことができることを理解しているためです (私にとってあらゆる種類のセキュリティとは)。-->マークされたメソッドが CA2141 警告でマークされ、他の多くのメソッドが新しい警告を生成します (それらのほとんどは例外処理に関連しています)。SecurityTransparent
SecurityCritical
SecuritySafeCritical
CA2141:透過的なメソッドは LinkDemands を満たしてはなりません
CA2140:透過的なコードはセキュリティ クリティカルな項目を参照してはなりません - そこで、このアセンブリにもマークを付けてみることにし
SecurityCritical
ました。
--> 私のSecuritySafeCritical
メソッドは最終的に警告を生成しませんが、例外処理を持つメソッドからのこれらの他のすべての警告がまだあります。
解決策を探しましたが、この場合に役立つものは何も見つかりませんでした。また、このトピックに関する情報はまれであり、時代遅れです (.Net Framework 2.0 に関連するため、セキュリティ全体が .Net Framework 4.0 で大幅に変更されたようです)、または私にとっては理解しにくいものです。ですから、誰かが私が何を試すことができるか、または何をすべきかについて考えを持っていることを願っています.