using System; using System.Collections; using System.Security; using System.Security.Policy; using System.Text; class Program { static void Main() { // ゾーン指定なし GetPermissionSetInfoFrom(SecurityZone.NoZone); // ローカル・コンピュータ・ゾーン GetPermissionSetInfoFrom(SecurityZone.MyComputer); // イントラネット・ゾーン GetPermissionSetInfoFrom(SecurityZone.Intranet); // インターネット・ゾーン GetPermissionSetInfoFrom(SecurityZone.Internet); // 信頼されたサイト・ゾーン GetPermissionSetInfoFrom(SecurityZone.Trusted); // 制限付きサイト・ゾーン GetPermissionSetInfoFrom(SecurityZone.Untrusted); Console.ReadKey(); } private static void GetPermissionSetInfoFrom(SecurityZone zone) { Console.WriteLine("--【{0}ゾーン】が持つアクセス許可------------", zone.ToString()); Evidence zoneEvidence = new Evidence(); zoneEvidence.AddHostEvidence(new Zone(zone)); PermissionSet permissions = SecurityManager.GetStandardSandbox(zoneEvidence); if (permissions.IsUnrestricted()) { Console.WriteLine("★無制限=すべての処理を実行できる★"); } else if (permissions.Count == 0) { Console.WriteLine("★なし=セキュリティが必要な処理はすべて制限する★"); } foreach (IPermission item in permissions) { // アクセス許可の名前を取得 SecurityElement element = item.ToXml(); Hashtable ht = element.Attributes; string classAttr = ht["class"].ToString(); string[] nameSet = classAttr.Split(new char[] {','}); string name = nameSet[0]; name = name.Replace("System.Security.Permissions.", ""); // アクセス許可に付属するオプション設定を取得 StringBuilder sb = new StringBuilder(); foreach (string key in ht.Keys) { if ((key == "class") || (key == "version")) { continue; } sb.AppendFormat("{0}:{1}、", key, ht[key]); } string option = ""; string optionRaw = sb.ToString(); if (String.IsNullOrEmpty(optionRaw) == false) { option = String.Format("({0})", optionRaw.Substring(0, optionRaw.Length - 1)); } // 子要素がある場合はそのことを示す string child = ""; if (element.Children != null) { child = "※子要素があります!"; } Console.WriteLine("・" + name + option + child); } Console.WriteLine("-----------------------------------------------------"); } }