我正在寻找一种方法来使用 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)
在这里,有没有办法输入可以从 obj1 执行“do_forbidden()”的东西?input() 而不是 raw_input() 有什么不同吗?
如果漏洞实际上是可能的,攻击者可以“猜测”其中一个方法的名称来执行它,那么前缀“do_”是一个很好的保护吗?