Ответ
FastAPI включает несколько встроенных и рекомендуемых механизмов для обеспечения безопасности веб-приложений, основанных на открытых стандартах.
Ключевые механизмы:
-
Аутентификация и авторизация через
fastapi.securityFastAPI предоставляет классы для реализации стандартных схем безопасности, таких как 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} -
Валидация данных с помощью Pydantic Автоматическая валидация всех входящих данных (из тела запроса, параметров пути, query-параметров) на основе моделей Pydantic. Это является первой линией защиты от множества атак, включая инъекции, так как данные приводятся к строго определенным типам.
-
Управление 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"], ) -
Хеширование паролей Хотя это не является частью самого фреймворка, официальная документация настоятельно рекомендует использовать библиотеку
passlibдля безопасного хеширования и верификации паролей с использованием современных алгоритмов, таких как bcrypt. -
Использование 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 сейчас — это как гулять по минному полю в тапочках, волнение ебать.
Вот, короче, основные киты. Не панацея, конечно, но если это всё применять, то шансы, что тебя взломают просто так, резко падают. А дальше уже твоя фантазия и бдительность, чувак.