清理动态加载的IronPython脚本以防止恶意代码

时间:2016-10-11 16:03:27

标签: c# security unity3d ironpython python-2.6

我在Unity制作游戏并且我希望最大化可配置性 - 用户可以使用自己的关卡,纹理,声音效果,AI行为等加载自己的包。对于我知道的AI部分没有脚本,它可能不太可能,所以我一直在寻找动态加载和放大的方法。从已经构建的Unity游戏运行脚本。我设法通过IronPython做到了这一点,但我担心有人可能会使用此功能来创建假包,这些包在玩家的计算机上运行恶意代码。我想我应该对可运行的代码类型(使用哪些函数?导入哪些模块?)施加一些限制,但我甚至不知道从哪里开始。我之前从未做过类似的事情。所有我可以google就像清理HTML或GET / POST查询一样使用 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;
}

总而言之,我正在寻找至少一些提示。从哪里开始?

修改

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

  1. 我不知道它是否是可以完成错误的完整列表?
  2. 我对技术方面一无所知;如何检查代码以检查一些不允许的令牌或任何东西......编译/解析/标记化/等。对我来说是一个黑魔法。
  3. 我发现的是例如:

0 个答案:

没有答案