У меня есть служба WCF для связи с ядром Mathematica для оценки произвольных выражений и получения результатов.(Мое единственное намерение состоит в том, чтобы использовать Mathematica как сложный механизм компоновки графов для статических графов, использующих SVG и XAML, но мой хост с математическим ядром может иметь совершенно простой интерфейс, который может оценивать произвольные выражения Mathematica: это может в случае нарушения безопасностипривести к произвольному внедрению кода.)
- Есть ли способ запустить приложение в sandbux с «полным набором прав доступа - (минус) файл io доступ на запись»?
Использование
var e = new Evidence();
e.AddHostEvidence(new Zone(SecurityZone.Trusted));
var pset = SecurityManager.GetDefaultSandbox(e);
приводит к ситуации, когда мое приложение вылетает из-за более позднего исключения безопасности, поэтому я хочу убедиться, что я просто удалил один тип разрешения.Мне не хватает подробностей о типе исключения безопасности и о том, что его вызвало, моя программа связана с коммерческой библиотекой без символов отладки.
Как отладитьказнь внутри коммерческой библиотеки?Может ли рефлектор или аналогичный инструмент помочь мне?
Как получить лучшую трассировку стека об исключении безопасности?(Полный источник текущего приложения для песочницы приведен ниже)
или
var pset = new PermissionSet(PermissionSet.Unrestricted); // set is empty o_O!
pset.RemovePermission(typeof(FileIOPermission)); // io permission still active
...
не помогает.
полный контекст:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security;
using System.Security.Policy;
using System.Security.Permissions;
using System.Reflection;
using System.Runtime.Remoting;
class Sandboxer : MarshalByRefObject
{
const string uPath = @"..\..\..\KernelHost\bin\Debug";
static string aPath = Path.GetFullPath(uPath);
const string uAssembly = "KernelHost";
static void Main(string[] args)
{
var e = new Evidence();
e.AddHostEvidence(new Zone(SecurityZone.Trusted));
var pset = new PermissionSet(PermissionState.Unrestricted);
//pset.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
//pset.AddPermission(new UIPermission(UIPermissionWindow.AllWindows, UIPermissionClipboard.AllClipboard));
//pset.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, aPath));
//pset.SetPermission(new UIPermission(PermissionState.None));
pset.RemovePermission(typeof(UIPermission));
//pset.SetPermission(new FileIOPermission(PermissionState.None));
var ass = typeof(Sandboxer).Assembly.Evidence.GetHostEvidence<StrongName>();
var ads = new AppDomainSetup();
ads.ApplicationBase = aPath;
var sandbox = AppDomain.CreateDomain(
"Sandbox",
e,
ads,
pset,
ass);
Console.WriteLine(pset.Count);
foreach (IPermission p in pset)
{
Console.WriteLine(p.ToXml());
}
sandbox.ExecuteAssemblyByName("KernelHost");
}
}
- Есть ли доступное коммерческое решение для песочницы с открытым исходным кодом для .NET 4.0 или, возможно, на более высоком уровне для Windows Server2008 R2 (также для нативных приложений), который может мне помочь?