Я ищу способ использовать запрос raw_input() для выполнения кода другого объекта, чтобы гарантировать, что я делаю это безопасным способом.Python raw_input() использовать удаленное выполнение кода
У меня есть два класса, у первого есть метод, который я не должен называть, ни снаружи, ни изнутри; второй имеет метод для анализа запроса пользователя, построенного таким образом: «метод для вызова arg1 arg2 ...». Например: «Добавить 5 3». И метод «do_add» должен быть вызван с 5 и 3 в качестве аргументов.
class Obj1 :
# ...
def do_forbidden(self) :
# Not supposed to execute
# ...
class Obj2 :
# ...
def process_cmd(self, cmd) :
words = cmd.split()
if len(words) > 0 :
mthdname = 'do_' + words[ 0 ]
args = words[1:]
if hasattr(self, mthdname):
mthd = getattr(self, mthdname)
mthd(*args)
# ...
Тогда:
obj1 = Obj1()
obj2 = Obj2()
# ...
cmd = raw_input("Command : ")
obj2.process_cmd(cmd)
Здесь есть способ напечатать что-то, что может выполнить "do_forbidden()" от obj1? И делает ли input() вместо raw_input() значение?
Если эксплойт действительно возможен, злоумышленник может «угадать» одно из имен методов для его выполнения, то префикс «do_» является хорошей защитой?
Я использую Python 2.6, если это может быть полезно. – flzr86