Heroku需要ALLOWED_HOSTS吗?

Joe*_*Joe 10 python security django heroku web

根据我的理解,ALLOWED_HOSTS检查何时DEBUG=False阻止攻击者将自己的域指向您的站点.

它看起来像Heroku的Custom Domains做同样的事情.

因此,不要在Heroku按钮中添加必需的ALLOWED_HOSTS变量(因为它感觉多余并且在您赶时间时容易出错),您是否可以设置并允许Heroku验证请求是否应该转移到哪里?app.jsonALLOWED_HOSTS = ['*']

Two*_*ist 15

警告:可能已过期

settings.py下面表示Heroku的文档的内容时,这个答案最初写于2015年虽然我比较肯定的ALLOWED_HOSTS这里介绍的设置是安全的,请咨询向上最新文档复制任何这些设置的休息之前!

原始答案如下.请参阅下面的详细信息.


这正是你应该做的,按照Heroku上的Django入门:

settings.py

# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']

# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
Run Code Online (Sandbox Code Playgroud)

2018年更新

上面的链接不再有效,因为Heroku现在格式化他们的入门文档有点不同,提供预先构建的示例回购而不是文档中的代码示例.目前的Python入门回购ALLOWED_HOSTS = [],而且DEBUG = True,根据该Django的2.1文档触发特殊情况下

ALLOWED_HOSTS =  ['localhost', '127.0.0.1', '[::1]']
Run Code Online (Sandbox Code Playgroud)

由于在制作DEBUG = True过程中不推荐或完全没有想法,因此本答案中的原始建议仍然是Heroku应用程序的生产就绪解决方案.在决定做什么之前,请务必阅读并理解Charlie Weems的简要回答.

完全披露:我没有在最新版本的Django中构建一个生产Heroku应用程序.YMMV :)


Cha*_*ems 8

请注意,Heroku 已于2017年12月从入门指南中删除 ['*'].

我建议设置ALLOWED_HOSTS = ['.herokuapp.com'].

即使Heroku的域服务提供此保护,指定该设置将提醒您在移动到其他托管服务时更新配置.