Ответ 1
Вы можете попробовать проверить Github post-request IP: 207.97.227.253, 50.57.128.197, 108.171.174.178
Github предлагает способ, чтобы сообщить URL-адрес, когда проект был обновлен с использованием webhooks.
Как проверить, что сообщение, отправленное на мой сервер после приема, действительно произошло из github?
Должен ли я проверить IP-адрес отправителя или я могу отправить аутентификацию где-нибудь? Я хочу убедиться, что кто-то не пытается подделать запрос, претендующий на получение из github.
Один из вариантов состоит в том, чтобы установить крючок через PubSubHubbub и использовать параметр hub.secret
, чтобы создать подпись SHA1 HMAC сообщения тело. Однако для этого потребуется, чтобы мой сервер настраивал запрос, а не ожидал, что пользователи установят обратный вызов после получения на мой сайт, когда захотят. Я предпочел бы просто попросить пользователей вставить URL-адрес, который я им передаю в URL-адрес.
Вы можете попробовать проверить Github post-request IP: 207.97.227.253, 50.57.128.197, 108.171.174.178
Вы можете выполнить ping GitHub Meta API, чтобы получить массив IP-адресов (в CIDR), что входящие служебные крючки будут происходить и перекрестно проверять их на IP-адрес запроса:
Взгляните на GitHub docs на тему: они предлагают использовать HTTPS и базовую аутентификацию.
В частности, настройте URL-адрес полезной нагрузки в этом формате:
https://yourUser:[email protected]/path
Если у вас есть несколько пользователей, вы должны дать каждому другое имя пользователя и пароль. Предполагая, что они хранят этот пароль в частном порядке, вы можете доверять тому, что подлинный запрос действительно поступает из GitHub и из этой учетной записи.
Смотрите также: https://github.com/blog/237-basic-auth-post-receives
В дополнение к ответу @mnml, вторым шагом может быть просто вызвать API и подтвердить, что указанная информация соответствует последней известной фиксации для проекта. Это тот же самый процесс, который использует OpenID для проверки переданных данных.
Итак, сначала я смог победить атаки немого ответа, просто проверив IP. Затем я мог бы спросить github, если информация, которую я получил, верна.
GET /repos/:user/:repo/commits/:sha
Вы можете найти свой веб-сайт на труднодоступном URL. Скажи:
https://my-host.com/webhooks/E36006BE2C4BABDEEF307C77E34F415B/my-hook
(Это 128-бит случайных данных - увеличивается до любого размера, который чувствует себя комфортно). Предполагая, что вы можете доверять github, чтобы защитить этот URL-адрес, довольно вероятно, что клиенту, попавшему в этот URL-адрес, можно доверять.
Если URL-адрес должен быть взломан, вам просто просто создать новый случайный URL-адрес и обновить веб-сервер.
Просто убедитесь, что вы используете хороший источник энтропии...