このコード アクセス セキュリティの例が壊れているのはなぜですか?

StackOverflow https://stackoverflow.com/questions/928651

  •  06-09-2019
  •  | 
  •  

質問

CAS があることは知っています 限られた価値のあるもの, 、でもとにかく知りたい。

表示されている動作が理解できません:基本的なデフォルトの CAS は、私のごく普通の環境ではまったく動作しないようです。

このサンプルクラスを見てみましょう。

using System;
using System.Security;
using System.Security.Permissions;

namespace CASNotWorkingExample
{
    class Program
    {
        static void Main(string[] args)
        {
            FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted);

            if (SecurityManager.IsGranted(perm))
                Console.WriteLine("granted");
            else
                Console.WriteLine("denied");

            Console.ReadKey();
        }
    }

}

これをビルドしてexeを入れると、 CASNotWorkingExample.exe, 、「信頼できない」ファイル共有上の別のマシン (IP は 192.168.1.101) にコピーします。次に、管理者以外のコマンド プロンプトから次を使用して実行します。 \\192.168.1.101\untrusted\CASNotWorkingExample.exe, 、「拒否」が返されることを期待しています。そうではありません。「許可」を返します。

Windows は、セキュリティが疑わしいリモート EXE を扱っていることを認識しています。スタートメニューの「ファイル名を指定して実行」から同じコマンドを実行すると…ダイアログで、通常のセキュリティ警告「発行者を確認できませんでした。」が表示されます。よろしいですか?など等。"。つまり、exe がローカル マシン上で実行されていると誤って認識され、ゾーンの割り当てが間違っているわけではありません。

さらに、.NET 2.0 構成ツール ([ランタイム セキュリティ ポリシー] を右クリックし、[アセンブリの評価...] を選択) を使用してまったく同じ exe を確認すると、.NET がアセンブリに Internet_Zone アクセス許可を割り当てているだけであることがわかります。 。これらのアクセス許可には、FileIOPermission は含まれません (分離ストレージは独自のアクセス許可です)。

代替テキスト http://img5.imageshack.us/img5/2256/casperms.jpg

他の人にとっては役立つかもしれないが、これまでのところ私には役に立っていないデータ:

  • 作業中にこれに遭遇しました MSプレスの本 MCTS 70-536 試験用。第 11 章では CAS について説明します。レッスン 1 / 例 1 は、上で説明したとおり、私にとっては失敗です。ここに表示されているものは、その機能を取り除いたバージョンです。
  • このような EXE が実際にディスクに書き込むことができることを確認しました。IsGranted チェックはおそらく正しいです。
  • 2 台のマシンは Vista SP1 と WinXP を実行しています。どちらがクライアントでどちらがファイルサーバーであっても動作は同じなので、Vista の問題ではありません。
  • 標準の非特権ユーザーとして実行する場合と管理者として実行する場合の動作は同じです。
  • AD ドメインで実行されていません。
  • クライアントとファイルサーバーで同じユーザー名とパスワードを使用しているため、ファイルにアクセスする必要はありません net use 資格情報を提供します。

きっとこれは「ああ」という瞬間の一つになるだろう...私には何が欠けているのでしょうか?

役に立ちましたか?

解決

の変化が機能する方法は、exeファイルを直接管理exeファイルが完全な信頼与えられているのWin32のCreateProcess APIから起動されるexe.When管理打ち上げ証拠の新しい作品があるということです。

もちろん、.NET構成ツールは、単にそれを検査し、exeファイルを起動しません。これは証拠が異なっており、それに割り当てられたコードグループに影響を与えることを意味します。これは、順番にアクセス権に影響します。

かなり混乱しています。

詳しい情報はここで見つけることができます:

MSDNの社会

<のhref = "http://blogs.msdn.com/brada/archive/2007/10/26/adhoc-poll-allowing-net-exes-to-run-off-a-network-share。 ASPX」のrel = "nofollowをnoreferrer">ブラッドエイブラムスのブログで

他のヒント

私は CAS の専門家ではありませんが、おそらくこれは .NET 3.5 SP1 での変更点 これにより、ネットワーク共有からのコードを完全信頼として実行できるようになります。

編集: ブラッド・エイブラムス氏はこう述べている これを利用するために再コンパイル/ターゲットは必要ありません。逆も同じように動作すると思います。マシンに 3.5 SP1 がインストールされている場合、2.0 をターゲットにしても古い動作は得られません。

これを利用するために既存のアプリケーションを再コンパイルしたり変更したりする必要はありません。現在の 2.0 アプリケーションはそのまま動作します。3.5 で新しいものをターゲットにする必要はありません。

2.0 FX のみを新規 (VM) インストールすると、この原因を根絶できる可能性があると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top