3

我即将部署一个 Flask 应用程序,由于内置调试器非常好,我想知道是否可以在生产环境中使用它。

因此,我一直在寻找一种有条件的方式来激活该调试器,仅针对来自特定 IP 的请求,或者仅针对在 cookie 中具有特殊密码的请求(或同时满足两个密码)。

我想没有内置的方法可以做到这一点,因此我很想知道我应该在哪里挖掘来破解它。也许可以用猴子补丁 Flask 来做到这一点?另外,如果这是一个坏主意-请告诉我原因。

4

2 回答 2

2

很可能通过破解 Werkzeug 的类来启用或禁用调试器(请参阅此处DebuggedApplication的源代码)。

但这是一个可怕的想法。这是一个生产系统,在你去调试你的问题的同时,会有真实的用户通过不同的线程或进程与应用程序交互。一些可能发生的事情:

  • Werkzeug 的调试器很可能在开发服务器内部进行了测试。在多进程或多线程服务器下使用时,它可能有效,也可能无效。
  • 当你调试你的问题时,会有真实的用户在不同的进程或线程上与应用程序交互,可能会从你下面改变应用程序的状态,这可能会影响你的调试。
  • 在调试问题时,您可能会无意中更改应用程序的状态,从而影响当前使用该系统的其他用户。
于 2013-06-23T07:02:16.000 回答
0

正如@Miguel 指出的那样,这对于生产环境来说不是一个好主意,但为了黑客攻击,这就是你可以做到的。

class CustomDebuggedApplication(DebuggedApplication):
    def __call__(self, environ, start_response):
        # Note, this line can check whatever you want.  A cookie, a query string param, a header.  But don't read the post form body.  If you do, it is gone and can't be used later.
        if not request.args.get('secret', False) == 'Foo' and not request.args.get('__debugger__', False):
            return self.app(environ, start_response)
        return super(CustomerDebuggedApplication).__call__(environ, start_response)
于 2013-06-23T07:05:32.720 回答