Проверка происхождения HTTP-запроса - PullRequest
0 голосов
/ 11 апреля 2019

Сценарий : Скажем, у меня есть RESTful http (s) API, работающий где-то на публичном порту IP +, и теперь я хочу сделать простой интерфейс, который взаимодействует с этим API.

Ограничение : Я хочу использовать GitHub Pages для обслуживания внешнего интерфейса и хочу сделать хранилище общедоступным.

Вопрос : Есть ли способ спроектировать API так, чтобы успешными были только вызовы, исходящие с веб-сайта gh-pages? То есть, если кто-то раскошелит репозиторий и запустит собственную версию клиентского интерфейса, сможет ли API заметить, что вызов не происходит с «официального» сайта gh-pages? Мне действительно интересно, есть ли что-то, что я могу предоставить в вызове API, который докажет , что вызывающий абонент звонит из определенного, заранее определенного места.

Если внешний интерфейс может быть размещен в частном порядке, я мог бы хранить общий секрет на обоих серверах и использовать его для аутентификации, но в идеале я хотел бы иметь возможность размещать его на страницах GitHub (устраняя необходимость в обслуживании сервера). себя). Могу ли я как-то использовать тот факт, что сайт gh-pages будет иметь надлежащий сертификат от Github? Или этот сертификат будет доступен для всех сайтов gh-страниц одинаково, и, следовательно, бесполезен для определения происхождения?

Надеюсь, вопрос ясен, любой вклад будет очень признателен!

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Предположение, что запросы сделаны из gh-pages неверно. Запросы выполняются из ip-браузера пользователя. Любой пользователь будет загружать содержимое веб-страницы в браузер из вашего собственного репозитория или из fork репозитория, но запросы к API будут создаваться из браузера пользователя.

По умолчанию браузер не разрешает запросы к API в домене, отличном от того, из которого загружается HTML. Таким образом, загрузка контента из https://pages.github.com/ и запрос вашего собственного частного сервера не удастся, так как он будет находиться в другом домене (см. CORS ), но существует много способов избежать этого (см. Обмен ресурсами между источниками на страницах GitHub ).

Итак, пока вам достаточно CORS (см. Ссылку выше, как включить запросы к вашему API), вам не о чем беспокоиться. В противном случае вы ничего не можете сделать, но авторизуете клиентов.

0 голосов
/ 12 апреля 2019

Есть ли способ спроектировать API так, чтобы успешными были только вызовы, исходящие с веб-сайта gh-pages?

Нет.

Единственная информация, которую вы имеете, - это то, что клиент выбирает, чтобы сообщить вам.

Клиент может отправить заголовок реферера,Пользовательский клиент определенно может лгать об этом.

...