Github offers a way让URL知道何时使用webhooks更新项目。
如何验证发送到我服务器的post-receive hook的帖子实际上来自github?
我应该检查发件人的IP地址,还是可以在某处发送身份验证?我想确保某人不会试图欺骗假装来自github的请求。
一个选项是通过PubSubHubbub设置挂钩并使用hub.secret
选项创建帖子正文的SHA1 HMAC签名。但是,这需要我的服务器设置请求,而不是等待用户在他们想要的时候设置后接收回调到我的网站。我宁愿让用户将我提供的URL粘贴到帖子网址中。
答案 0 :(得分:10)
您可以ping GitHub's Meta API以获取传入服务挂钩将来自的IP地址数组(以CIDR表示法),并根据请求的IP进行交叉检查:
答案 1 :(得分:8)
您可以尝试检查Github的请求后IP: 207.97.227.253,50.57.128.197,108.171.174.178
答案 2 :(得分:8)
看看GitHub's docs on the subject:他们建议使用HTTPS和基本身份验证。
具体而言,请使用以下格式设置有效负载网址:
https://yourUser:yourPass@yoursite.net/path
如果您有多个用户,则需要为每个用户提供不同的用户名和用户名。密码。假设他们将该密码保密,您可以相信一个身份验证请求确实来自GitHub和该帐户。
答案 3 :(得分:5)
除了@mnml的回答之外,第二步可能只是调用API and verify,即给出的信息与项目的上次已知提交相匹配。这与OpenID用于验证传递的数据是否有效的过程相同。
所以,首先我可以通过检查IP来击败愚蠢的回复攻击。接下来我可以问github我收到的信息是否正确。
GET /repos/:user/:repo/commits/:sha
答案 4 :(得分:2)
您可以在难以猜测的网址上找到您的webhook。说:
https://my-host.com/webhooks/E36006BE2C4BABDEEF307C77E34F415B/my-hook
(这是128位随机数据 - 增加到任何尺寸感觉舒服)。假设您可以信任github以保证此网址的安全,那么很可能是客户端可以信任该网址。
如果网址遭到破坏,只需生成新的随机网址并更新您的网络服务器就很简单。
请确保您使用的是良好的熵源......