Есть ли способ проверить, что запрос на мой 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-адресов при настройке или на панели управления клиента, чтобы сделать его более трудным для третьих сторон использовать украденное имя пользователя и пароль,