KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Here is the reason why this question was being asked: www.devplusplus.com/Tests/CSharp/Hello_World . While similar questions were asked before, the many answers online have several issues: This must be done ".Net 4.0" style, not legacy mode. The assembly is in-memory and will only be in memory, it cannot be written to the file system. I would like to limit all access to the file-system, network, etc. Something like this: var evidence = new Evidence(); evidence.AddHostEvidence(new Zone(SecurityZone.Internet)); var permissionSet = SecurityManager.GetStandardSandbox(evidence); So far, I cannot find a way to create an AppDomain and load an assembly THAT IS NOT ON THE FILE SYSTEM , but rather in RAM. Again, the reasons why the other solutions didn't work are identified above: 1. Many were for pre-4.0, and 2. Many relied on the ".Load" method pointing to the file system. Answer 2: I have an assembly reference due to it being generated by the CSharpCodeProvider class, so if you know a way to turn that into a byte array, that would be perfect! Sample Code to Show The Security Flaw var provider = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v4.0" } }); var compilerparams = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = true, }; var compilerResults = provider.CompileAssemblyFromSource(compilerparams, string_Of_Code_From_A_User); var instanceOfSomeClass = compilerResults.CompiledAssembly .CreateInstance(className); // The 'DoSomething' method can write to the file system and I don't like that! instanceOfSomeClass.GetType().GetMethod("DoSomething") .Invoke(instanceOfSomeClass, null); So why can't I just save th
Tags (comma-separated)
Save Edits
Cancel