📜  Django 中 ALLOWED_HOST 的作用是什么 - Python (1)

📅  最后修改于: 2023-12-03 15:14:43.618000             🧑  作者: Mango

Django 中 ALLOWED_HOST 的作用是什么

在 Django 中,ALLOWED_HOSTS 是一个设置,其作用是告诉 Django 哪些主机名可以访问该 Django 项目。如果一个请求的主机名不在 ALLOWED_HOSTS 中,Django 将拒绝该请求,以防止潜在的安全风险。

配置 ALLOWED_HOSTS

在 Django 的设置文件(settings.py)中,需要设置 ALLOWED_HOSTS 变量。该变量是一个包含允许访问的主机名的列表。

# settings.py

ALLOWED_HOSTS = ['example.com', 'www.example.com']

在上面的示例中,只允许 example.comwww.example.com 这两个主机名访问该 Django 项目。

为什么需要使用 ALLOWED_HOSTS

ALLOWED_HOSTS 是 Django 用于防止 HTTP Host 头攻击的一种安全特性。HTTP Host 头攻击是指攻击者伪造 HTTP 请求的主机头(Host header),从而获取或篡改敏感信息的一种攻击方式。

通过限制来自特定主机名的请求,可以防止攻击者通过伪造主机头来发送请求,并增加项目的安全性。

ALLOWED_HOSTS 的格式

ALLOWED_HOSTS 应该是一个字符串列表,每个字符串代表一个允许访问的主机名。常见的配置方式有以下几种:

  • 单个主机名:ALLOWED_HOSTS = ['example.com']
  • 多个主机名:ALLOWED_HOSTS = ['example.com', 'www.example.com']
  • 使用通配符:ALLOWED_HOSTS = ['.example.com']ALLOWED_HOSTS = ['*.example.com'](允许所有 example.com 的子域名访问)
其他注意事项
  • 为了增加安全性,不要将 ALLOWED_HOSTS 设置为 ['*']。这将允许任何主机名访问项目,并增加项目受到攻击的风险。
  • 在开发阶段,可以将 ALLOWED_HOSTS 设置为 ['*'],以方便测试。但在生产环境中,务必将其设置为实际的允许访问的主机名。
  • 当请求的主机名与 ALLOWED_HOSTS 中的任何一个不匹配时,Django 将返回一个 "Bad Request (400)" 响应。

参考链接:Django 官方文档 - ALLOWED_HOSTS