Как ограничить PowerShell SDK, чтобы ограничить доступ сценариев к определенным методам обратного вызова в приложении C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как ограничить PowerShell SDK, чтобы ограничить доступ сценариев к определенным методам обратного вызова в приложении C#

Сообщение Anonymous »

В моем приложении C# я хочу использовать PowerShell SDK, чтобы позволить предоставленным пользователем сценариям PS взаимодействовать с ограниченными частями приложения посредством обратных вызовов. Я хочу ограничить возможности этих сценариев, в идеале разрешая вызывать только определенные методы в предоставленном интерфейсе обратного вызова, не предоставляя полный доступ к системным ресурсам или конфиденциальным типам .NET.
Вот упрощенный пример кода:

Код: Выделить всё

var iss = InitialSessionState.CreateRestricted(SessionCapabilities.Language);
iss.LanguageMode = PSLanguageMode.FullLanguage;  // ConstrainedLanguage would inhibit the callbacks

// Add specific cmdlets, for example
iss.Commands.Add(new SessionStateCmdletEntry("New-Object", typeof(Microsoft.PowerShell.Commands.NewObjectCommand), ""));
iss.Commands.Add(new SessionStateCmdletEntry("Select-Object", typeof(Microsoft.PowerShell.Commands.SelectObjectCommand), ""));

// Create runspace
using var rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();

// Provide a limited callback object
IMySafeCallbacks callbacks = new MySafeCallbacks();
rs.SessionStateProxy.SetVariable("callbacks", callbacks);

// Run the PowerShell script
using var ps = PowerShell.Create();
ps.Runspace = rs;
ps.AddScript(@"$callbacks.LogMessage('Hello from script');");
var results = ps.Invoke();
Требования:
  • Ограничить доступ: сценарии должны иметь возможность вызывать только определенныеметоды в интерфейсе IMySafeCallbacks без доступа к другим
    .NET-типам или системным ресурсам.
  • Предотвратите несанкционированный доступ: избегайте раскрытия каких-либо возможностей для
    сценарий для доступа к системным ресурсам (например, для чтения/записи файлов) или создания произвольных объектов.
Проблемы:
  • Если я использую PSLanguageMode.ConstrainedLanguage, сценарий завершается с ошибкой при
    вызове методов в интерфейсе обратного вызова из-за ограниченной
    поддержки типа .NET.
  • В PSLanguageMode.FullLanguage нет простого способа
    предотвратить доступ к операциям файловой системы или созданию произвольного объекта .NET
    с помощью таких методов, как New-Object или [System.IO.File] ].
Вопрос:
Как настроить пространство выполнения PowerShell для ограничения доступные командлеты и методы строго соответствуют тем, которые определены в моем интерфейсе IMySafeCallbacks? Есть ли способ разрешить вызов только определенных методов моего приложения, блокируя при этом доступ к конфиденциальным системным операциям? Или способ разрешить вызов IMySafeCallbacks даже в PSLanguageMode.ConstrainedLanguage?
Будем очень признательны за любые рекомендации или примеры кода о том, как безопасно ограничить PowerShell SDK в этом сценарии!

Подробнее здесь: https://stackoverflow.com/questions/791 ... back-metho
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»