Недавно я видел сообщение это SO о получении домена запроса. Мне интересно, будет ли эта информация надежной (т.е. может ли злоумышленник «подделать» эту информацию?). В частности, домен и тип запроса (GET, POST и т. д.). Причина, по которой я спрашиваю, заключается в том, что я не уверен, смогу ли я использовать это для защиты серверной части моего приложения. Я решил, что должен разрешать POST-запросы только из моего собственного домена.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Запросы, отправляемые клиентами (например, браузерами), не поступают из определенного домена. Они приходят с IP-адреса клиента. Этот клиент может запускать веб-страницу с определенного сайта, но любой информации, включенной в запрос на этот счет, нельзя доверять, и она может быть подделана так, чтобы быть чем-либо, что хочет клиент. Подумайте об этом еще раз. Запросы клиентов не приходят ИЗ домена. Они исходят от клиента, который мог получить или не получить веб-страницу из определенного домена до выполнения запроса API.
Таким образом, НЕТ, вы не можете использовать предоставленную клиентом информацию о домене страницы для реализации какой-либо разумной безопасности. Если запрос содержит информацию о том, с какой веб-страницы был получен код для запроса, эта информация может быть легко подделана мошенническим клиентом.
API-интерфейсы, которые используются из браузера, могут потребоваться для использования в сочетании с вошедшим в систему пользователем (через файл cookie для входа или какой-либо токен безопасности, полученный после входа в систему), но не могут быть «защищены» за пределами этого. Чтобы браузер мог получить доступ к вашему API, любой другой клиент, включая мошеннические клиенты, также может получить доступ к API.
Типы защиты, которые такие люди, как Google, устанавливают для своих API, которые используются в браузерах:
Таким образом, вы можете потребовать учетную запись API или логин пользователя, прежде чем разрешить доступ к вашему сервису. Помимо этого, обычно просто защищают API от неправомерного использования, а также понимают, что определенный пользовательский клиент все еще может получить доступ к API.
I figured that I should only allow POST requests from my own domain.
Вы должны разрешать запросы POST только от действительного, вошедшего в систему пользователя (требуются учетные данные для входа в каждый запрос API), и вы должны разрешать им влиять только на данные, которые этот конкретный пользователь имеет права изменять. Вы не можете контролировать, откуда поступают запросы или какой тип клиента их выполняет.