2

ネイティブ C++ と混合されていない C++/CLI ソリューションがあります (ただし、このタイプもあります)。これは 3 つのプロジェクトで構成されており、そのうちの 2 つは私の質問に関連しています。

1 つ目は静的ライブラリ (.lib) で、Acitve Diretytory の問題を扱います。
2 つ目は、他のプロジェクトに依存する実行可能なメイン プロジェクト (.exe) です。

私は Visual Studio 2012 を初めて使用し、コード分析などのツールの利点を利用したいと考えています。ソリューションに対してコード分析を実行すると、いくつかの CA2122 警告が明らかになります。

CA2122 リンク要求のあるメソッドを間接的に公開しないでください

私はこの警告に関連するセキュリティ上の懸念を理解しており、対処方法も理解していたと思いますが、このセキュリティ関連のことも初めて知りました。この警告は、ソリューション全体を調べたときの Active Directory コードに関連していますが、lib-project だけを調べても表示されず、すべて問題ないように見えます。

今問題の核心に:

  1. SecuritySafeCritical属性で警告されるすべてのメソッドをマークしようとしました
    --> no changes, same warnings
  2. アセンブリ全体を としてマークし、問題のあるメソッドにSecurityCriticalを追加することで、別のプロジェクトでこの警告を解決しました。アセンブリに as のマークを付けて をSecuritySafeCritical追加してもこの問題には影響しないため、これは機能しません。(この種のプロジェクトを時代遅れにするヘッダーファイルでコードを完全にする必要があるように見えるため、マネージドスタティックライブラリでは* .cppが時代遅れのように見えることを私は知っています...しかし、すべての小さなプロジェクトに.dllを持たせたくありませんまた、一部のルーズなヘッダー ファイルを使用したり、他のリージョンと混合したりするのではなく、このようなものを独自のプロジェクトにカプセル化したいと考えています)AssemblyInfo.cppSecurityCritical
  3. その後、メイン プロジェクトのアセンブリ全体を としてマークしようとしましSecurityTransparentた。これまでのところ、このマークされたコードはまたはコードSecuritySafeCriticalで呼び出すことができることを理解しているためです (私にとってあらゆる種類のセキュリティとは)。-->マークされたメソッドが CA2141 警告でマークされ、他の多くのメソッドが新しい警告を生成します (それらのほとんどは例外処理に関連しています)。SecurityTransparentSecurityCriticalSecuritySafeCritical

    CA2141:透過的なメソッドは LinkDemands を満たしてはなりません
    CA2140:透過的なコードはセキュリティ クリティカルな項目を参照してはなりません

  4. そこで、このアセンブリにもマークを付けてみることにしSecurityCriticalました。
    --> 私のSecuritySafeCriticalメソッドは最終的に警告を生成しませんが、例外処理を持つメソッドからのこれらの他のすべての警告がまだあります。
したがって、この問題を解決する方法がわかりません。管理された静的ライブラリを使用することが問題であり、dll プロジェクトだけを使用する場合は、2. で述べたように問題を解決できるかもしれませんが、別の *.dll プロジェクトをプログラムと共有することは避けたいと思います。
解決策を探しましたが、この場合に役立つものは何も見つかりませんでした。また、このトピックに関する情報はまれであり、時代遅れです (.Net Framework 2.0 に関連するため、セキュリティ全体が .Net Framework 4.0 で大幅に変更されたようです)、または私にとっては理解しにくいものです。ですから、誰かが私が何を試すことができるか、または何をすべきかについて考えを持っていることを願っています.

4

0 に答える 0