DEBUG = True Django

33
在生产环境中,为什么有人说保持 DEBUG = True 可能存在潜在的危险?
有哪些可能会利用这个安全问题在我的服务器上执行恶意任务的例子?

你应该接受正确的答案。 - shuboy2014
1
你应该接受@PraveenGollakota的答案。 - Greg Schmit
3个回答

28

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

"绝不能在 DEBUG 开启的情况下将网站部署到生产环境中。

你听到了吗?绝不能在 DEBUG 开启的情况下将网站部署到生产环境中。

调试模式的主要特性之一是显示详细的错误页面。如果你的应用在 DEBUG 为 True 的情况下引发异常,Django 将显示详细的回溯信息,包括关于你的环境的大量元数据,例如从 settings.py 中定义的所有当前 Django 设置。"

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

它还会浪费大量内存:

"记住,在开启 DEBUG 模式时,Django 还会记住它执行的每个 SQL 查询。这在调试时很有用,但在生产服务器上会迅速消耗内存。"


我们在生产环境中需要分配什么来进行调试? - shuboy2014
13
这似乎没有回答问题。楼主似乎知道不要在生产环境中启用DEBUG;他只是想知道一个例子,其中有人可能会利用安全问题对服务器执行恶意任务。重申“永远不要这样做”就像《Family Guy》中的一集,Quagmire说他不会与叫鸡女郎勾搭,Joe说“好,不要这么做”,然后Quagmire说:“我已经知道不要那样做了,你不必告诉我不要这样做”,然后Joe回答:“好的,别那样做”。 - Greg Schmit
2
添加此注释是因为我对答案进行了投票。"你听到了吗,永远不要"这句话真的没有必要。有人请教专家解释"常识"背后的推理并没有什么问题。 - Scott Smith

21

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

默认情况下,任何包含KEY(自Django 1.4开始)、SECRET等的设置都会自动替换为*。然而,如果有人决定将SECRET称为SECURE_STR或其他任何名称,则该信息将显示为纯文本!您希望这样吗?此外,这只会更方便地让某些人轻松地入侵您的服务器。


0
如果DEBUG = True Django会显示详细的错误页面,其中包含每个URL的详细信息以及我们的重要凭据,这对开发人员理解和解决错误非常有帮助。在生产环境中,务必将DEBUG = False,以避免显示详细的错误页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接