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();
}
}
}
CASNotWorkingExample.exe
これをビルドし、「信頼されていない」ファイル共有の別のマシン (IP は 192.168.1.101) にexe を配置します。\\192.168.1.101\untrusted\CASNotWorkingExample.exe
次に、「拒否」が返されることを期待して、を使用して非管理コマンドプロンプトから実行します。そうではありません。「許可」を返します。
Windows は、セキュリティが疑わしいリモート EXE を扱っていることを認識しています。スタート メニューの [ファイル名を指定して実行...] ダイアログから同じコマンドを実行すると、通常のセキュリティ警告「発行元を確認できませんでした。よろしいですか、など」が表示されます。そのため、exe がローカル マシンで実行されていると誤って考え、ゾーンの割り当てを誤っているわけではありません。
さらに、.NET 2.0 構成ツール ([Runtime Security Policy] を右クリックし、[Evaluate Assembly...] を選択) を使用してまったく同じ exe を見ると、.NET が Internet_Zone 権限のみをアセンブリに割り当てていることがわかります。 . これらのアクセス許可には、FileIOPermission は含まれません (Isolated Storage は独自のアクセス許可です)。
代替テキスト http://img5.imageshack.us/img5/2256/casperms.jpg
他の人には役立つかもしれないが、これまでのところ私にはなかったデータ:
- MCTS 70-536 試験についてMS Pressの本を読んでいるときに、この問題に遭遇しました。第 11 章はすべて CAS に関するものです。レッスン 1 / 例 1 は、上で説明したように、私には失敗します。ここに表示されているのは、その簡略化された変形です。
- このような EXE が実際にディスクに書き込めることを確認しました。つまり、IsGranted チェックはおそらく正しいでしょう。
- 2 台のマシンは、Vista SP1 と WinXP を実行しています。どちらがクライアントでどちらがファイルサーバーであるかに関係なく、動作は同じであるため、Vista のものではありません。
- 標準の非特権ユーザーとして実行する場合と管理者として実行する場合の動作は同じです。
- AD ドメインで実行されていません。
- クライアントとファイルサーバーで同じユーザー名とパスワードを使用
net use
するため、資格情報を提供するために使用する必要なくファイルにアクセスできます。
私はこれがそれらの「arrrgh」の瞬間の 1 つになると確信しています.何が欠けているのですか?