C# 针对恶意代码清理动态加载的IronPython脚本

C# 针对恶意代码清理动态加载的IronPython脚本,c#,security,unity3d,ironpython,python-2.6,C#,Security,Unity3d,Ironpython,Python 2.6,我正在Unity中制作一个游戏,我想最大限度地提高可配置性-用户可以加载自己的软件包,包括自己的级别、纹理、音效、AI行为等。对于AI部分,我知道如果没有脚本,可能不太可能,所以我正在寻找从已经构建的Unity游戏中动态加载和运行脚本的方法。我通过IronPython设法做到了这一点,但我担心有人可能会使用此功能创建假软件包,在玩家的计算机上运行恶意代码。我想我应该对什么样的代码可以运行(使用了哪些函数?导入了哪些模块?)施加一些限制,但我甚至不知道从哪里开始。我以前从未做过这样的事。我能在谷歌

我正在Unity中制作一个游戏,我想最大限度地提高可配置性-用户可以加载自己的软件包,包括自己的级别、纹理、音效、AI行为等。对于AI部分,我知道如果没有脚本,可能不太可能,所以我正在寻找从已经构建的Unity游戏中动态加载和运行脚本的方法。我通过IronPython设法做到了这一点,但我担心有人可能会使用此功能创建假软件包,在玩家的计算机上运行恶意代码。我想我应该对什么样的代码可以运行(使用了哪些函数?导入了哪些模块?)施加一些限制,但我甚至不知道从哪里开始。我以前从未做过这样的事。我能在谷歌上做的就是清理HTML或使用Python获取/发布查询。。。不完全是我想要的,因为我想清理Python本身

下面是我如何启动Python的测试示例:

public class PythonLauncher : MonoBehaviour
{
    ScriptEngine engine;
    ScriptScope scope;

    void Start()
    {
        engine = Python.CreateEngine();
        scope = engine.CreateScope();

        scope.SetVariable("foo", new Foo { someExampleData = "World" });

        string example = "output = 'Hello ' + foo.someExampleData + '!'";
        var source = engine.CreateScriptSourceFromString(example);
        source.Execute(scope);

        var output = scope.GetVariable<string>("output");
        Debug.Log(output);
    }
}

public class Foo
{
    public string someExampleData;
}
公共类PythonLauncher:monobhavior
{
脚本引擎;
脚本范围;
void Start()
{
engine=Python.CreateEngine();
scope=engine.CreateScope();
SetVariable(“foo”,新foo{someExampleData=“World”});
string example=“输出='Hello'+foo.someExampleData+'!'”;
var source=engine.CreateScriptSourceFromString(示例);
来源、执行(范围);
var输出=scope.GetVariable(“输出”);
Debug.Log(输出);
}
}
公开课Foo
{
公共字符串someExampleData;
}
总而言之,我至少在寻找一些提示。从哪里开始

编辑:

好的,我在谷歌上搜索了更多,因为我注意到,这与在python中使用
eval()
有多么相似。。。清理
eval()
显示了更多视图。现在我有一些想法要注意什么,但是:

  • 我不知道这是否是一份可以做错事的完整清单
  • 我对技术方面还是一无所知;如何检查代码以检查一些不允许的令牌或任何东西。。。编译/解析/标记化/等等对我来说是一个黑魔法
  • 我发现的是,例如: