[解決済み] セキュリティ透過的な方法Xによるセキュリティクリティカルな方法Yへのアクセスの試みは失敗しました。
質問内容
サーバーアプリケーションのバージョンがかなり安定しており、数十の顧客に1年近く配備されています。
最近、ある新しい顧客がアプリケーションをセットアップしたところ、次のようなエラーが発生しました。
System.MethodAccessException: セキュリティ透過型メソッドによる試行 [SomeMethod] からセキュリティ上重要なメソッド [SomeOtherMethod] にアクセスする。 が失敗しました。
SomeMethod と SomeOtherMethod はどちらも私が書いたアセンブリのメソッドで、.NET 4 に対してビルドされており、Windows サービス内で動作しています。違いがあるとすれば、SomeOtherMethod は .NET 2.0 に対して構築されたサード パーティ製アセンブリ (EntLib 4.1) の型を参照していることです。EntLib 4.1 のコードを見ると、SecurityTransparent 属性と APTC 属性の両方が使用されていますが、他のクライアントでは問題が発生したことがありません。
これらのアセンブリは、.NET 2.0 CLRからアップグレードされましたが、かなり前のことです。このコードは他の顧客でも問題なく実行されており、私はAPTC属性もSecurityCritical属性もどこにも明示的に使用していません。
このことから、設定の問題か、あるいは.NET Frameworkのパッチの問題ではないかという結論に至ったのです。この破壊的な変化を引き起こすような.NETのパッチがリリースされたことはあるのでしょうか?デフォルトではオフになっているが、顧客が有効にしている可能性のある、この種のチェックを強制する構成設定がどこかにあるのでしょうか?
最後にもう一点。私のサービスでは、SSRS RDLCを利用してPDFを生成しています。.NET 4のいくつかの変更により、私は以下の構成を介してレガシーセキュリティポリシーを使用するようにサービスを強制する必要があります。
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true" />
</runtime>
なぜこのようなことをする必要があるのか、詳しくはこのstackoverflowの投稿を参照してください。 .NET 4.0での非常に高いメモリ使用量
重要なのは、他のお客さんでも同じようにやっていることです。この1社だけが問題を抱えているのです。
解決方法は?
エンタープライズライブラリを担当するMicrosoft Patterns And Practicesチームが採用しているパターンやプラクティスは、かなり嘆かわしいものです。 まあ、例外は正確で、quot;I'll definitely check security"で装飾されたメソッドを、quot;Meh, I won't check security so don't bother burning the cpu cycles to check it"で装飾されたコードから呼ぶことはできないんだ。 これは、Javaで使われている例外指定と同じくらいスケールの大きなものです。 CASは非常に便利ですが、例外を診断するのは大きな頭痛の種で、しばしば自分が所有していない、修正できないコードを含んでいます。 .NET 4で非推奨となった大きな理由です。
編集部終了。 この問題を解決するには、なぜCASが適用されるのかを知る必要があります。 最も単純な説明は、サービスが完全に信頼できる状態で実行されていないことです。 の最も簡単な説明は その は、クライアントがローカルハードディスクにサービスをインストールしなかったことです。 あるいは、一般的にローカルアセンブリでもdon't-trust-itモードでコードを実行している場合、非常に偏執的な管理者はそれを好む可能性があります。 これはCaspol.exeで設定する必要があります。このツールのコマンドラインオプションはCASと同じくらい謎めいています。 信頼されない場所の説明でポットシュートすると、クライアントは次のようにCaspolを実行する必要があります。 ブログ記事 . または、単にサービスをローカルにデプロイするだけで、デフォルトの "I trust thee" が適用されます。
OPが発見した本当の理由を編集しています。 代替データストリーム 信頼できないインターネットやネットワークからファイルをダウンロードすると、そのファイルに追加されます。 ファイルは、quot;Zone.Identifier"という名前のストリームを取得し、quot;ZoneId"の値によって、それがどこから来たのか追跡します。 この値によって、保存場所から得られる信頼が上書きされます。 通常、インターネットゾーンに格納します。 エクスプローラーでファイルを右クリックし、「"Unblock"」をクリックして、そのストリームを削除してください。 そのファイルを信頼できることを確認した後に :)
関連
-
Linuxセキュリティの基礎
-
[解決済み] bcryptはどうして塩を内蔵しているのですか?
-
[解決済み] .NET 4.0 プロジェクトで .NET 2.0 混合モード アセンブリを参照するために必要な「追加設定」は何ですか?
-
[解決済み] ハッシュ化アルゴリズムと暗号化アルゴリズムの根本的な違い
-
[解決済み】.NET 4ランタイムでPowerShellを実行するにはどうしたらいいですか?
-
[解決済み】'useLegacyV2RuntimeActivationPolicy'は、.NET 4 configで何をするのでしょうか?
-
[解決済み】Dockerとパスワードの保護
-
[解決済み] ベストプラクティス。パスワードのソルティングとペパリング?
-
[解決済み] Google Authenticatorが公共サービスとして利用可能に?
-
[解決済み] APIキーとシークレットキーはどのように機能するのですか?APIキーやシークレットキーを他のアプリケーションに渡すのは安全ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ClientとUser-Agentの違い
-
[解決済み] SSLエラー: ローカルの発行者証明書を取得できない
-
[解決済み] 後で平文を取り出すためのユーザーパスワードの保管について、倫理的にどのように取り組むべきでしょうか?
-
[解決済み] 認証と認可
-
[解決済み] HTTPクッキーはポート指定ですか?
-
[解決済み】Dockerとパスワードの保護
-
[解決済み] SSOはCASかOAuthか?
-
[解決済み] パスワードのハッシュ化と暗号化の違いについて
-
[解決済み] チェックボックスリキャプチャの仕組みと使い方を教えてください。
-
[解決済み] コマンドの標準入力に変数の値を渡すには?