IronPython отключить импорт после использования

Есть ли способ отключить использование импорта после того, как я закончу его использовать? Я использую IronPython в качестве движка сценариев и не хочу, чтобы пользователи могли что-либо импортировать. Это можно сделать в LuaInterface с помощью setfenv:

luanet.load_assembly("System.Windows.Forms")
luanet.load_assembly("System.Drawing")

Form=luanet.import_type("System.Windows.Forms.Form")

-- Only allow the use of the form class

local env = { Form = _G.Form }

setfenv(1, env)

Или установив для функций импорта значение nil перед синтаксическим анализом файла сценария:

luanet.load_assembly = nil
luanet.import_type = nil

Возможно ли это в IronPython?


person loltesting    schedule 05.12.2009    source источник


Ответы (2)


Один из вариантов - предварительно проверить скрипты, которые вы выполняете, и запретить любые, содержащие операторы import (или from ... import).

foreach(line in script) {
    if(line.TrimeStart().StartsWith("import") || line.TrimeStart().StartsWith("from") {
        throw ...;
    }
}

Это не надежно (__import__ по-прежнему проблема), но оно покрывает подавляющее большинство случаев.

person Jeff Hardy    schedule 05.12.2009

Вы можете создать ловушку для функции импорта и обрабатывать пользовательский импорт как хотите.

В вашем случае вы можете просто вернуть null для любого импорта, который получает ваш хук.

Здесь было объяснено, как это сделать: https://stackoverflow.com/a/4127766/448547

person Gusthema    schedule 14.09.2012