Как проверить, что запрос о перехвате после получения фактически поступил от github? - PullRequest
15 голосов
/ 25 января 2012

Github предлагает способ , чтобы сообщить URL-адресу, когда проект был обновлен с помощью веб-хуков.

Как проверить, что сообщение, отправленное на хук post-receive моего сервера, действительно пришло с github?

Должен ли я проверить IP-адрес отправителя или я могу куда-нибудь отправить проверку подлинности? Я хочу убедиться, что кто-то не пытается подделать запрос, притворяющийся github.

Один из вариантов - настроить хук через PubSubHubbub и использовать опцию hub.secret для создания подписи SHA1 HMAC тела сообщения. Однако для этого потребуется, чтобы мой сервер настраивал запрос, а не ждал, пока пользователи установят обратный вызов после получения на мой сайт, когда они захотят. Я предпочел бы просто попросить пользователей вставить URL-адрес, который я им предоставляю, в URL-адрес поста.

Ответы [ 5 ]

10 голосов
/ 21 августа 2013

Вы можете пропинговать Meta API GitHub , чтобы получить массив IP-адресов (в нотации CIDR ), из которого будут исходить входящие сервисные хуки, и перепроверить их по IP-адресу запроса:

https://api.github.com/meta

8 голосов
/ 31 декабря 2013

Взгляните на Документы GitHub по теме : они предлагают использовать HTTPS и базовую аутентификацию.

В частности, настройте URL полезной нагрузки в следующем формате:

https://yourUser:yourPass@yoursite.net/path

Если у вас несколько пользователей, вы дадите каждому свое имя пользователя и пароль. Предполагая, что они хранят этот пароль в секрете, вы можете верить, что запрос на аутентификацию действительно исходит от GitHub и от этой учетной записи.

Смотри также: https://github.com/blog/237-basic-auth-post-receives

8 голосов
/ 21 февраля 2012

Вы можете попробовать проверить IP-адрес Github после запроса: 207.97.227.253, 50.57.128.197, 108.171.174.178

5 голосов
/ 21 февраля 2012

В дополнение к ответу @ mnml вторым шагом может быть просто вызов API и проверка , что приведенная информация соответствует последней известной фиксации для проекта.Это тот же процесс, который OpenID использует для проверки правильности переданных данных.

Итак, сначала я смог победить атаки с немым ответом, просто проверив IP.Затем я могу спросить github, верна ли полученная информация.

GET /repos/:user/:repo/commits/:sha
2 голосов
/ 02 марта 2012

Вы можете найти свой webhook по трудно угадываемому URL.Скажите:

https://my-host.com/webhooks/E36006BE2C4BABDEEF307C77E34F415B/my-hook

(это 128-битные случайные данные - увеличивайте до любого удобного размера).Предполагая, что вы можете доверять github, чтобы сохранить этот URL-адрес безопасным, вполне вероятно, что клиент, выполняющий этот URL-адрес, может быть доверенным.

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

Просто убедитесь, что вы используете хороший источник энтропии ...

...