Django Rest + React + Flutter: как ограничить доменное происхождение запросов

В настоящее время я создаю веб-приложение + мобильное приложение.

Мой front end разработан с использованием React и Axios (для запросов вызовов API). Он обслуживается непосредственно vercel на сайте mydomain.com

Мое мобильное приложение разработано с использованием Flutter

Мой back end разработан с использованием Django и Django Rest. Она обслуживается с помощью apache2 на api.mydomain.com. Он обслуживает только конечные точки API.

Таким образом, фронтенд, мобильное приложение и бэкенд разделены.

Я хочу, чтобы только мой front-end (mydomain.com) и приложение flutter могли делать API запросы к моему Django Rest backend. Я хотел бы предотвратить любые другие домены, любые клиенты, такие как postman, insomnia, curl, или любой скрипт, чтобы сделать API запросы к моему бэкенду.

Я уже установил CORS в Django Rest. Однако я все еще могу делать запросы к бэкенду с помощью curl или любого другого клиента.

У вас есть идеи, что я могу сделать, чтобы достичь этого?

Заранее большое спасибо за ваши ответы.

CORS применяется только веб-браузерами для предотвращения утечки информации на несвязанные страницы, которые могут ее запросить. Вам нужен какой-то контроль доступа, либо аутентификация вызывающей стороны, либо ограничение доступа к конечной точке.

Проверка заголовка Host с помощью get_host() может обеспечить достаточную защиту, в зависимости от настроек вашего сервера.

get_host() сообщит вам значение заголовка Host в запросе, который представляет собой данные, предоставляемые клиентом, поэтому им можно манипулировать любым способом. Заголовок Host является неотъемлемой частью HTTP 1.1, позволяя размещать несколько доменов на одном адресе, поэтому вы можете рассчитывать на то, что ваш сервер будет отклонять запросы, приходящие не с localhost с соответствующим заголовком, но трудно быть уверенным.

Вероятно, надежнее было бы проверять сетевой адрес клиента и отклонять запросы от всех клиентов, кроме тех, которые специально разрешены. Проверьте и этот вопрос.

Вернуться на верх