33

在生产环境中,为什么我听到有人说离开 DEBUG = True 有潜在危险?

有人可能利用此安全问题在我的服务器上执行恶意任务的一个示例是什么?

4

2 回答 2

26

https://docs.djangoproject.com/en/dev/ref/settings/#debug

“永远不要在启用调试的情况下将站点部署到生产环境中。

你抓到了吗?切勿在启用调试的情况下将站点部署到生产环境中。

调试模式的主要功能之一是显示详细的错误页面。如果您的应用在 DEBUG 为 True 时引发异常,Django 将显示详细的回溯,包括有关您的环境的大量元数据,例如所有当前定义的 Django 设置(来自 settings.py)。”

基本上,这是一个巨大的安全漏洞。

它也浪费了大量的内存:

“同样重要的是要记住,当打开 DEBUG 运行时,Django 会记住它执行的每个 SQL 查询。这在调试时很有用,但它会迅速消耗生产服务器上的内存。”

于 2013-01-23T00:42:21.163 回答
19

Django 尽最大努力混淆调试页面中的安全信息,但它并不完美。

默认情况下,任何包含 KEY(从 Django 1.4 开始)、SECRET 等的设置都会自动替换为*。但是,如果有人决定发挥创意并将 SECRET 称为 SECURE_STR 或其他名称,它将显示为纯文本!你想要那个吗?此外,对于某人轻松侵入您的服务器来说,这只是更多的素材。

于 2013-01-23T00:46:40.447 回答