Какие основные механизмы безопасности предоставляет FastAPI?

Ответ

FastAPI включает несколько встроенных и рекомендуемых механизмов для обеспечения безопасности веб-приложений, основанных на открытых стандартах.

Ключевые механизмы:

  1. Аутентификация и авторизация через fastapi.security FastAPI предоставляет классы для реализации стандартных схем безопасности, таких как OAuth2 и HTTP Basic Auth. Это позволяет легко защитить эндпоинты.

    Пример с OAuth2 Password Bearer:

    from fastapi import Depends, FastAPI
    from fastapi.security import OAuth2PasswordBearer
    
    app = FastAPI()
    # Схема указывает, что токен нужно искать в заголовке Authorization: Bearer <token>
    oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")
    
    @app.get("/users/me")
    async def read_users_me(token: str = Depends(oauth2_scheme)):
        # Логика валидации токена и получения пользователя
        return {"token": token}
  2. Валидация данных с помощью Pydantic Автоматическая валидация всех входящих данных (из тела запроса, параметров пути, query-параметров) на основе моделей Pydantic. Это является первой линией защиты от множества атак, включая инъекции, так как данные приводятся к строго определенным типам.

  3. Управление CORS (Cross-Origin Resource Sharing) С помощью CORSMiddleware можно гибко настроить, каким внешним источникам (доменам) разрешено отправлять запросы к вашему API. Это критически важно для безопасности фронтенд-приложений.

    from fastapi.middleware.cors import CORSMiddleware
    
    app.add_middleware(
        CORSMiddleware,
        allow_origins=["https://your-frontend.com"],
        allow_credentials=True,
        allow_methods=["GET", "POST"],
        allow_headers=["Authorization"],
    )
  4. Хеширование паролей Хотя это не является частью самого фреймворка, официальная документация настоятельно рекомендует использовать библиотеку passlib для безопасного хеширования и верификации паролей с использованием современных алгоритмов, таких как bcrypt.

  5. Использование HTTPS FastAPI предназначен для работы за обратным прокси-сервером (например, Nginx или Traefik), который должен быть настроен для работы по HTTPS, обеспечивая шифрование трафика.

Ответ 18+ 🔞

А, слушай, смотри, тут про безопасность в FastAPI. Ну, в общем, они там не просто так, эти ребята, накосячили кучу готовых штук, чтобы твое приложение не разнесли в клочья за пять минут. Всё на открытых стандартах, не из головы выдумано.

Вот, смотри, что у них в арсенале, блядь:

1. Аутентификация, эта, ну, вход-выход. Там в fastapi.security целый склад готовых схем. Хочешь OAuth2, хочешь обычную HTTP Basic — бери и пользуйся, ёпта. Не надо велосипед из говна и палок собирать.

Вот, например, как токены через OAuth2 гоняют:

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()
# Эта штука говорит: "Эй, браток, ищи токен в заголовке, где 'Bearer' написано!"
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")

@app.get("/users/me")
async def read_users_me(token: str = Depends(oauth2_scheme)):
    # Тут бы ещё проверить, что токен не левый, конечно. Но это уже твои заморочки.
    return {"token": token}

Вот и всё, защитил роут. Красота, да? Не надо самому парсить заголовки, ёбушки-воробушки.

2. Валидация данных через Pydantic. Это вообще, блядь, мастхэв. Ты описываешь, какие данные ждёшь, а он всё остальное отсекает нахуй, как будто кричит: "Не лезь, сука, со своим грязным JSON'ом!" Автоматом приводит к нужным типам — никаких инъекций, никакого кривого говна. Первая линия обороны, пиздец как важная.

3. CORS — эта хрень, которая решает, кто может к тебе стучаться. А то придёт какой-нибудь левый сайт с другого домена и начнёт дергать твое API, а ты и не поймешь, откуда ноги растут. Через CORSMiddleware говоришь: "Вот этим можно, а этим — иди нахуй".

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://moy-frontend.com"], # Только своему фронту разрешаем
    allow_credentials=True,
    allow_methods=["GET", "POST"], # Только GET и POST, остальное — нет
    allow_headers=["Authorization"],
)

И всё, спокойно спишь. Не то что некоторые, у которых API как публичный сортир.

4. Хеширование паролей. Сами они, конечно, пароли не хешируют — это не их епархия. Но в доках прямо кричат: "Используйте passlib, мудаки!". Особенно с bcrypt. Ни в коем случае не храни пароли в открытом виде, а то потом будешь охуевать, когда базу слили, а там всё как на ладони. Ядрёна вошь!

5. HTTPS, ёпта. Сам FastAPI, конечно, не заставляет, но он ждёт, что ты будешь работать за нормальным прокси — Nginx, Traefik, Caddy. И вот этот прокси уже должен натягивать SSL, чтобы весь трафик шифровался. Без HTTPS сейчас — это как гулять по минному полю в тапочках, волнение ебать.

Вот, короче, основные киты. Не панацея, конечно, но если это всё применять, то шансы, что тебя взломают просто так, резко падают. А дальше уже твоя фантазия и бдительность, чувак.