Я ищу способ использовать приглашение 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_» хорошей защитой?