Класс TrustedHostMiddleware
Класс TrustedHostMiddleware применяется к приложению
FastAPI и проверяет заголовок Host входящего запроса.
Если домен не входит в список разрешённых, приложение
возвращает ответ 400 Bad Request. Это защищает
от атак типа Host Header Injection.
При создании middleware первым параметром передаётся
приложение app, а вторым - список разрешённых
хостов allowed_hosts. Дополнительно можно указать
параметр www_redirect, который перенаправляет
запросы с www-поддомена на основной домен.
Синтаксис
from fastapi import FastAPI
from fastapi.middleware.trustedhost import TrustedHostMiddleware
app = FastAPI()
app.add_middleware(TrustedHostMiddleware, allowed_hosts=allowed_hosts)
Пример
Давайте разрешим только домен 'example.com' и все
его поддомены:
from fastapi import FastAPI
from fastapi.middleware.trustedhost import TrustedHostMiddleware
app = FastAPI()
app.add_middleware(
TrustedHostMiddleware,
allowed_hosts=['example.com', '*.example.com'],
)
@app.get('/')
def index():
return {'text': 'hello'}
Результат выполнения кода для адреса http://example.com/:
{"text": "hello"}
Результат выполнения кода для адреса http://evil.com/:
{"detail": "Invalid host header"}
Пример
Давайте включим перенаправление с www-поддомена
на основной домен через параметр www_redirect:
Результат выполнения кода для адреса http://www.example.com/:
HTTP/1.1 307 Temporary Redirect
location: http://example.com/
Пример
Давайте разрешим любой хост через маску '*'.
Такой вариант полезен в разработке, но небезопасен
в продакшене:
from fastapi import FastAPI
from fastapi.middleware.trustedhost import TrustedHostMiddleware
app = FastAPI()
app.add_middleware(
TrustedHostMiddleware,
allowed_hosts=['*'],
)
@app.get('/')
def index():
return {'text': 'hello'}
Результат выполнения кода для любого адреса:
{"text": "hello"}
Смотрите также
-
класс
CORSMiddleware,
который настраивает кросс-доменные запросы -
класс
GZipMiddleware,
который сжимает ответы через gzip -
класс
HTTPSRedirectMiddleware,
который перенаправляет HTTP-запросы на HTTPS -
параметр
allow_origins,
который задаёт разрешённые источники для CORS