我即将部署一个 Flask 应用程序,由于内置调试器非常好,我想知道是否可以在生产环境中使用它。
因此,我一直在寻找一种有条件的方式来激活该调试器,仅针对来自特定 IP 的请求,或者仅针对在 cookie 中具有特殊密码的请求(或同时满足两个密码)。
我想没有内置的方法可以做到这一点,因此我很想知道我应该在哪里挖掘来破解它。也许可以用猴子补丁 Flask 来做到这一点?另外,如果这是一个坏主意-请告诉我原因。
很可能通过破解 Werkzeug 的类来启用或禁用调试器(请参阅此处DebuggedApplication
的源代码)。
但这是一个可怕的想法。这是一个生产系统,在你去调试你的问题的同时,会有真实的用户通过不同的线程或进程与应用程序交互。一些可能发生的事情:
正如@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)