Mi sto prendendo gioco dell'idea di utilizzare la capacità di C# di compilare il codice su richiesta come base di un linguaggio di scripting. Mi chiedevo, come posso sandbox gli script che sto eseguendo in modo che non possano accedere al file system, alla rete, ecc. Fondamentalmente, voglio permessi limitati per lo script che viene eseguito.Assembly.CreateInstance and security
passaggi che prendo:
CompilerResults r = CSharpCodeProvider.CompileAssemblyFromSource(source);
Assembly a = r.CompiledAssembly;
IScript s = a.CreateInstance(...);
s.EntryPoint(...);
C'è qualcosa che impedisce a CallyourScriptHere() di ripristinare tutte le autorizzazioni impostate dal tuo esempio? – MarkP
'RevertAll' ripristina le autorizzazioni CAS impostate solo nello stack frame corrente, quindi chiamarlo in' CallYourScriptHere' annullerebbe solo le modifiche apportate in quel metodo. – MagnatLU
Questa non è una protezione efficace contro codice potenzialmente dannoso. Vedi http://blogs.msdn.com/b/shawnfa/archive/2006/02/02/523390.aspx per il motivo per cui i modificatori del walkman non dovrebbero essere utilizzati per il sandboxing. –