Het uitvoeren van dynamisch gegenereerde code in productie klinkt eng. En dat zou het ook moeten zijn – als je het verkeerd doet. Hazina’s plugin sandbox is ontworpen met beveiliging als primaire zorg, met gebruik van meerdere beschermingslagen.
Defense in Depth
Hazina gebruikt vier beveiligingslagen voor plugins:
- Compilatietijd-analyse – Blokkeer gevaarlijke code voordat deze compileert
- Namespace-whitelisting – Alleen goedgekeurde API’s zijn beschikbaar
- Runtime sandbox – Tijdslimieten en geheugengrenzen
- Service-injectiecontrole – Plugins hebben alleen toegang tot services die je expliciet toestaat
Compilatietijd Beveiliging
// Deze patronen worden geblokkeerd tijdens de compilatie:
// - Directe toegang tot het bestandssysteem (System.IO.File, Directory)
// - Ruwe netwerkoproepen (Socket, HttpClient)
// - Procesuitvoering (Process.Start)
// - Reflectie (Assembly.Load, Type.InvokeMember)
// - Thread-manipulatie (Thread.Start, Task.Run)
De Sandbox Configureren
builder.Services.AddHazinaPlugins(options => {
options.Security = new PluginSecuritySettings {
// Namespace whitelist
AllowedNamespaces = new[] {
"System",
"System.Linq",
"System.Collections.Generic",
"System.Text.Json",
"MyApp.Models" // Je eigen veilige types
},
// Uitvoeringslimieten
MaxExecutionTime = TimeSpan.FromSeconds(30),
MaxMemoryMB = 128,
// Service toegang
AllowedServices = new[] {
typeof(IEmailService),
typeof(ILogger),
typeof(IDocumentStore)
}
};
});
De Plugin Context
Plugins hebben geen directe toegang tot DI – ze gaan via een gecontroleerde context:
// Binnen een plugin:
var logger = context.GetService<ILogger>(); // OK - op de whitelist
var db = context.GetService<DbContext>(); // Gooit een fout - niet op de whitelist
var param = context.GetParameter<Customer>("customer"); // Veilige parameter toegang
Timeout Bescherming
try
{
var result = await pluginManager.ExecuteAsync("MyPlugin", parameters);
}
catch (PluginTimeoutException ex)
{
logger.LogWarning("Plugin {Name} liep vast na {Duration}",
ex.PluginName, ex.Duration);
}
Audit Trail
Elke plugin-uitvoering wordt gelogd:
- Wie de plugin heeft gemaakt
- Wanneer het werd gecompileerd
- Elke uitvoering met duur en resultaat
- Versiegeschiedenis met verschillen
In de volgende post kijken we naar Agent Orchestration – Hazina’s framework voor het bouwen van autonome AI-agenten.
Veelgestelde Vragen
Hazina hanteert een gelaagde beveiligingsaanpak genaamd Defense in Depth, die compilatietijd-analyse omvat om gevaarlijke code te blokkeren, namespace-whitelisting voor goedgekeurde API’s, een runtime sandbox met uitvoeringslimieten en gecontroleerde service toegang voor plugins.
Hazina blokkeert verschillende gevaarlijke codepatronen tijdens de compilatie, waaronder directe toegang tot het bestandssysteem, ruwe netwerkoproepen, procesuitvoering, reflectie en thread-manipulatie, om ervoor te zorgen dat alleen veilige code kan worden uitgevoerd.
Ontwikkelaars kunnen de Hazina plugin sandbox configureren door de `AddHazinaPlugins`-methode te gebruiken, waar ze beveiligingsopties kunnen instellen zoals toegestane namespaces, uitvoeringslimieten en toegestane services om te controleren waartoe de plugins toegang hebben.
Hazina logt uitgebreide details tijdens de uitvoering van plugins, inclusief wie de plugin heeft gemaakt, wanneer het werd gecompileerd, de duur en het resultaat van elke uitvoering, en versiegeschiedenis met verschillen, wat zorgt voor een grondige audit trail voor verantwoording.