Heroku上是否需要允许的主机?

2024-04-29 08:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所知,ALLOWED_HOSTS会在DEBUG=False时进行检查,以防止攻击者将自己的域指向您的站点。

看起来希罗库的Custom Domains也做了同样的事情。

因此,与其在app.json中为Heroku Button添加所需的ALLOWED_HOSTS变量(因为它感觉多余,而且在您匆忙的时候很容易出错),不如设置ALLOWED_HOSTS = ['*']并允许Heroku验证请求是否到达了它们应该到达的位置?


Tags: debugjsonfalseappheroku站点custombutton
2条回答

警告:可能已过时

下面的settings.py代表了Heroku在2015年最初撰写此答案时的文档内容。虽然我相对确定这里提供的ALLOWED_HOSTS设置是安全的,但在复制这些设置的任何其他设置之前,请查阅the up-to-date docs

原答案如下。更多信息见下文。


这正是你应该做的,每Getting Started with Django on Heroku

设置.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'),
)

2018年更新

上面的链接不再有效,因为Heroku现在对入门文档的格式有点不同,它提供了预先构建的示例repo,而不是文档中的代码示例。当前的Python Getting Started RepoALLOWED_HOSTS = [],但也有DEBUG = True,根据the Django 2.1 docs触发了一个特殊情况

ALLOWED_HOSTS =  ['localhost', '127.0.0.1', '[::1]']

由于DEBUG = True在生产中不被推荐或是一个好主意,这个答案中的原始建议仍然是Heroku应用程序的生产就绪解决方案。在决定做什么之前,一定要阅读并理解Charlie Weems' brief answer

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

请注意,Herokuremoved['*']来自2017年12月的入门指南。

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

即使Heroku的域服务提供了这种保护,如果移动到另一个托管服务,指定设置将提醒您更新配置。

相关问题 更多 >