15

Github 提供了一种让 URL 知道项目何时使用 webhook 更新的方法。

如何验证发送到我服务器的 post-receive 挂钩的帖子实际上来自 github?

我应该检查发件人的 IP 地址还是可以在某处发送身份验证检查?我想确保有人不会试图欺骗假装来自 github 的请求。

一种选择是通过PubSubHubbub设置挂钩并使用该hub.secret选项创建帖子正文的 SHA1 HMAC 签名。但是,这需要我的服务器设置请求,而不是等待用户在需要时设置接收后回调到我的站点。我宁愿只要求用户将我给他们的 URL 粘贴到帖子 URL 中。

4

5 回答 5

11

您可以 ping GitHub 的 Meta API以获取传入服务挂钩将源自的 IP 地址数组(以CIDR表示法),并根据请求的 IP 交叉检查它们:

https://api.github.com/meta

于 2013-08-20T21:50:18.113 回答
8

可以尝试查看 Github 的请求后 IP : 207.97.227.253, 50.57.1​​28.197, 108.171.174.178

于 2012-02-21T17:55:06.530 回答
8

看看GitHub 关于这个主题的文档:他们建议使用 HTTPS 和基本身份验证。

具体来说,以这种格式设置您的有效负载 URL:

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

如果您有多个用户,您将为每个用户指定不同的用户名和密码。假设他们将该密码保密,那么您可以相信身份验证请求确实来自 GitHub 和该帐户。

另见:https ://github.com/blog/237-basic-auth-post-receives

于 2013-12-31T11:51:51.293 回答
5

除了@mnml 的回答,第二步可能只是调用API 并验证给定的信息是否与项目的最后一次已知提交相匹配。这与 OpenID 用于验证传递的数据是否有效的过程相同。

所以,首先我可以通过检查 IP 来击败愚蠢的回复攻击。接下来我可以询问 github 我收到的信息是否正确。

GET /repos/:user/:repo/commits/:sha
于 2012-02-21T18:31:03.237 回答
3

您可以在一个难以猜测的 URL 上找到您的 webhook。说:

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

(这是 128 位的随机数据 - 增加到任何感觉舒服的大小)。假设您可以信任 github 来确保此 url 的安全,那么访问该 url 的客户端很可能是可以信任的。

如果 URL 被泄露,只需生成一个新的随机 URL 并更新您的网络服务器是一件简单的事情。

只要确保您使用的是良好的熵源...

于 2012-03-02T15:47:21.923 回答