.NET / Security: Ограничение загрузки загрузки загрузки от доступа к определенным API

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

Вопрос

В приложении оболочки мне нужно иметь возможность загружать и выполнять другие сборы .NET во время выполнения, но без предоставления им полного доверия. По сути, я хочу их ограничить (загруженные сборки) от прикосновения к любым системам системных ресурсов (резьбу, сети и т. Д.), с единственным исключением, являющимся изолированным хранилищем. Однако сборки, которые из «я» должны быть выполнены с полным доверием.

Я рассматривал безопасность доступа кода, но я не совсем уверен, что я должен использовать.

Как бы вы пойдете об этом?

Это было полезно?

Решение

CAS в значительной степени то, что вам нужно здесь. Более конкретно, вы хотите загрузить сборку в свой собственный домен приложения:

var myEvidence = new Evidence(new object[] {SecurityZone.Internet});
var newDomain = AppDomain.CreateDomain("InternetDomain");
myDomain.Load("MyUntrustedAssembly.dll", myEvidence);
myDomain.CreateInstanceAndUnwrap("MyUntrustedAssembly","MyUntrustedObjectType");

//do your work with the untrusted assembly/type

AppDomain.Unload(myDomain);

Читайте на доменах приложений, различных зонах и наборы разрешений по умолчанию, назначенные им. Интернет является наиболее ограничительным для системных зон / наборов разрешений, доступных, в которых сбои все еще могут фактически выполнять (есть также ограниченная зона; сборки, падающие в эту зону, не могут работать). Вы можете использовать инструмент конфигурации .NET для создания наборов разрешений и определить условия (доказательства), которые код должен удовлетворять удовлетворение набора разрешений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top