在我的Asp.net网页中,我允许用户自己创建并运行代码,就像下面的代码一样,但是为了防止用户编辑恶意的代码访问磁盘、数据库,应该怎么做才能限制用户?
谢谢! 
using System;
using System.Reflection;
using System.Globalization;
using Microsoft.CSharp;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Text;namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            //1.CSharpCodePrivoder
            CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();            //2.CompilerParameters
            CompilerParameters objCompilerParameters = new CompilerParameters();
            objCompilerParameters.ReferencedAssemblies.Add("System.dll");
            objCompilerParameters.GenerateExecutable = false;
            objCompilerParameters.GenerateInMemory = true;            //3.CompilerResults
            CompilerResults cr = objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());            if (cr.Errors.HasErrors)
            {
                foreach (CompilerError err in cr.Errors)
                {
                    Console.WriteLine(err.ErrorText);
                }
            }
            else
            {
                Assembly objAssembly = cr.CompiledAssembly;
                object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");
                MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");                Console.WriteLine(objMI.Invoke(objHelloWorld, null));
            }            Console.ReadLine();
        }        static string GenerateCode()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("using System;");
            sb.Append(Environment.NewLine);
            sb.Append("namespace DynamicCodeGenerate");
            sb.Append(Environment.NewLine);
            sb.Append("{");
            sb.Append(Environment.NewLine);
            sb.Append("    public class HelloWorld");
            sb.Append(Environment.NewLine);
            sb.Append("    {");
            sb.Append(Environment.NewLine);
            sb.Append("        public string OutPut()");
            sb.Append(Environment.NewLine);
            sb.Append("        {");
            sb.Append(Environment.NewLine);
            sb.Append("             return \"Hello world  cw!\";");
            sb.Append(Environment.NewLine);
            sb.Append("        }");
            sb.Append(Environment.NewLine);
            sb.Append("    }");
            sb.Append(Environment.NewLine);
            sb.Append("}");            string code = sb.ToString();
            // Console.WriteLine(code);
            // Console.WriteLine();            return code;
        }
    }
}

解决方案 »

  1.   

    谢谢!
    请问有没有其他的思想?如:
    1、用没有一个权限更小的.net 4.0的子集
    2、.Net 4.0的动态语言是怎么一回事,能否做这个
      

  2.   

    过滤用户提交的数据,然后判断是否有恶意代码(恶意代码你自己想清楚都有哪些是有危害性的)就跟防SQL注入类似的思路吧
      

  3.   

    http://windows-tech.info/13/5e3db313a2a25803.php
    我查询了一些资料,但是不太懂,请问谁能解释一下!