0

我正在寻找一种方法来使用 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_”是一个很好的保护吗?

4

1 回答 1

2

不可能利用这一点。当然,除非其中一种do_方法存在其他漏洞。您不能执行未在与其process_cmd调用的对象相同的对象上定义的方法。

input将是完全不同的事情,它允许你执行任何你想要的事情。

于 2012-06-28T12:19:29.840 回答