PHP: проверка реферера домена с помощью API

Вопрос:

Есть ли способ проверить, что запрос на мой API поступает из определенного домена без риска кого-то, кто его подделывает?

Например, если я получаю запрос:

http://www.mydomain.com/api?request=something&key=12345

Я могу проверить, чтобы ключ API 12345 был назначен пользователю перед возвратом результатов. Тем не менее, я хотел бы ограничить этот ключ API 12345 конкретным доменом, чтобы только человек из theirdomain.com мог отправлять запросы API с помощью ключа 12345.

Я не спрашиваю, как программировать эту часть, я это знаю. Я просто спрашиваю, есть ли способ сделать это (или любые другие идеи, которые у вас есть), кроме использования $_SERVER['HTTP_REFERER'] (что-то более безопасное)?

Лучший ответ:

В HTTP нет ничего, что позволяет вам обнаруживать “контекст” запроса, кроме добровольной (и, следовательно, тривиально вызываемой) информации от клиента, такой как заголовок Referer.

Если это API-интерфейс от сервера к серверу (а не тот, который будет запрашиваться непосредственно пользовательским браузером), вы можете проверить исходный IP-адрес, используя $_SERVER['REMOTE_ADDR']. Это намного сложнее, если вы используете белый список, а не черный список IP-адресов. (Легко найти другой IP-адрес, чтобы избежать черного списка, но почти невозможно выбрать свой IP-адрес, чтобы избежать использования белого списка).

Это часто используется в API электронной коммерции и электронных платежах, где владелец учетной записи предоставляет список IP-адресов при настройке или на панели управления клиента, чтобы сделать его более трудным для третьих сторон использовать украденное имя пользователя и пароль,

Оцените статью
TechArks.Ru
Добавить комментарий