Django内置的错误电子邮件管理员功能(请参阅https://docs.djangoproject.com/en/dev/howto/error-reporting/)非常方便.
但是,这些回溯电子邮件包含完整的环境变量转储.
并且正如django docs和其他地方所建议的那样(例如https://docs.djangoproject.com/en/dev/howto/deployment/checklist/)我将一些秘密/密钥/密码移动到环境变量中作为一种简单的方法让他们远离代码库并在部署中改变它们.不幸的是,这意味着当有崩溃报告时,这些秘密会以明确的方式发送到一组电子邮件帐户.不是一个好习惯.
django ExceptionReporter具有基本过滤功能,可以提取"危险或令人反感"的设置,例如,settings.py中名称中包含字符串"pass"或"key"的任何项的值将替换为****s.因此,settings.py中的密钥被删除.但是此过滤器不适用于环境变量,这些变量出现在这些错误报告的Traceback-> Local vars-> request和Request Information-> Meta部分中.
显然,还有其他方法可以管理机密,但unix环境对于小型站点来说是一种非常常见的解决方案,在这种情况下,不保证创建更复杂的配置系统.
在基本的django文档中推荐的这两种实践在一起应用时也是不安全的,这似乎也是有问题的.
通过电子邮件发送站点调试信息总是存在泄漏信息的风险,但这似乎是一个重要的遗漏,可以通过扩展过滤来解决,可能由某些设置控制.
有没有人已经修补了这个(大概是扩展了django/views/debug.py中的过滤)以进行部署和/或向django团队提交补丁?或者我错过了其他一些明显的方法来解决这个问题?