Sand-boxing protected operations : PermissionSet « Security « C# / CSharp Tutorial






using System;
using System.Collections.Generic;
using System.IO;
using System.IO.IsolatedStorage;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Security;
using System.Security.AccessControl;
using System.Security.Policy;
using System.Security.Permissions;
using System.Security.Principal;
using System.Text;

public class MainClass
{
    public static void Main()
    {
        AppDomain sandboxAd;
        Evidence ev = new Evidence();
        ev.AddAssembly(Assembly.GetExecutingAssembly());
        PermissionSet permSet = new PermissionSet(PermissionState.None);
        permSet.AddPermission(new SecurityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new FileIOPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new ReflectionPermission(PermissionState.Unrestricted));
        sandboxAd = AppDomain.CreateDomain("Sandbox", ev, new AppDomainSetup(), permSet);

        sandboxAd.DoCallBack(delegate
        {
            byte[] fileContents = File.ReadAllBytes(@"C:\test.txt");
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IPv4);
            s.Connect("http://www.java2s.com/", 80);
            s.Send(fileContents);
            s.Close();
        });
        
    }
}








35.5.PermissionSet
35.5.1.Imperative security demands
35.5.2.Declarative security demands
35.5.3.Sand-boxing protected operations