Python 在flask中需要什么样的调试选项?为什么我们应该在web应用程序完成后避免它?

Python 在flask中需要什么样的调试选项?为什么我们应该在web应用程序完成后避免它?,python,flask,canopy,Python,Flask,Canopy,在谷歌搜索之后,我知道如果启用了调试选项,那么在每次更改代码后就不需要手动重新启动解释器。。 但我也阅读了烧瓶文档: 即使交互式调试器在分叉中不起作用 使其几乎无法用于生产的环境 它仍然允许执行任意代码。这使得 这是一个重大的安全风险,因此决不能用于 生产机器 我不明白他们是如何把它与安全和其他东西联系起来的。 有人能帮我理解他们在说什么吗? 提前谢谢 为什么需要调试模式 “调试”选项提供给您,以便您能够获得错误的完整回溯,能够从浏览器执行代码,以便能够进行适当的调试。这是为您作为开发人员进行调

在谷歌搜索之后,我知道如果启用了调试选项,那么在每次更改代码后就不需要手动重新启动解释器。。 但我也阅读了烧瓶文档:

即使交互式调试器在分叉中不起作用 使其几乎无法用于生产的环境
它仍然允许执行任意代码。这使得 这是一个重大的安全风险,因此决不能用于 生产机器

我不明白他们是如何把它与安全和其他东西联系起来的。 有人能帮我理解他们在说什么吗? 提前谢谢

为什么需要调试模式

“调试”选项提供给您,以便您能够获得错误的完整回溯,能够从浏览器执行代码,以便能够进行适当的调试。这是为您作为开发人员进行调试

为什么不在生产中使用它

如果出现错误,您不希望任何人看到您的回溯。我们只向用户显示,它是500或404,并且他们的请求有问题,或者服务器无法处理他们的请求。您不想展示这一点,因为让任何人知道您的应用程序中的安全漏洞是不安全的,因为他们可以利用它

除了您自己或您信任的人之外,您永远不希望任何人在您的机器上执行代码。如果一个恶意用户能够在你的服务器上执行任意代码,他们将能够做坏事

设置调试模式的一个良好实践是通过环境变量确定您是在生产环境中还是在开发环境中。大概是这样的:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'FRIENDS'
@app.route('/home')
    def home():
return 'BARBAD, PARTI'

if __name__ == '__main__':
    app.run(debug=True)  

请记住在您的生产环境中将“APP_ENV”设置为production。

它仍然允许执行任意代码任意用户定义的代码=打开安全漏洞。它指的是错误页面中包含的live Python REPL。如果最终用户以某种方式获得了一个正常工作的调试错误页面,他们可以直接编写Python代码并在服务器上执行。
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'FRIENDS'
@app.route('/home')
    def home():
return 'BARBAD, PARTI'

if __name__ == '__main__':
    app.run(debug=os.environ.get('APP_ENV', 'development') == 'development')