Управление безопасностью и использованием ресурсов C # Scripts - PullRequest
0 голосов
/ 05 февраля 2019

Мой клиент хочет добавить пользователям возможность определять небольшие сценарии, которые можно использовать для выполнения различных вычислений в уже существующем веб-приложении.В настоящее время мы изучаем использование CSharpScripts в Microsoft.CodeAnalysis.Scripting.CSharp для динамической компиляции и выполнения пользовательских функций.

Мне бы хотелось иметь возможность изолированной среды этих сценариев.В частности, я хотел бы наложить ограничения на ресурсы (память и т. Д.), Которые может использовать скрипт, а также ограничить доступ к библиотекам или значениям скрипта (например, я не хочу, чтобы пользователь делал вызовы веб-служб в своем скрипте).Я хочу избежать случая, когда пользователь пишет код, который негативно влияет на остальную часть приложения.

Ниже приведен пример кода

private static Script<double> GetCompiledScript(string userFunction)
{
    var options = ScriptOptions.Default.AddReferences(References).AddImports(Imports);
    var script = CSharpScript.Create<double>(expression, options, typeof(Globals));
    script.Compile();
    return script;
}    

public static String[] Imports => new[]
{
    "System",
    "System.Linq", 
    "System.Collections.Generic"
    };

public static Assembly[] References => new[]
{
    typeof(System.Object).GetTypeInfo().Assembly,
    typeof(System.Linq.Enumerable).GetTypeInfo().Assembly,
};


public class Globals
{
    public Dictionary<string, double> vars { get; set; }
}
...