@GingerPlusPlus: Спасибо, похоже, Марк переместил свой домен. Я обновил ссылки.

я оцениваю строку Python с помощью eval (), и у меня есть такой класс:

class Foo(object):
    a = 3
    def bar(self, x): return x + a

Каковы риски безопасности, если я не доверяю строке? В частности:

Являетсяeval(string, {"f": Foo()}, {}) небезопасным? То есть вы можете связаться с os, sys или чем-то небезопасным из экземпляра Foo?Являетсяeval(string, {}, {}) небезопасным? То есть можно ли полностью достучаться до os или sys из встроенных функций, таких как len и list?Есть ли способ, чтобы встроенные функции вообще не присутствовали в контексте eval?

Есть некоторые небезопасные строки, такие как «[0] * 100000000», которые меня не волнуют, потому что в худшем случае они замедляют / останавливают программу. В первую очередь меня беспокоит защита пользовательских данных, внешних по отношению к программе.

Очевидно, чтоeval(string) без пользовательских словарей небезопасно в большинстве случаев.

Ответы на вопрос(6)

Ваш ответ на вопрос