在现代软件开发过程中,GitHub Webhook 是一个非常重要的组件。它可以让你在代码提交、合并等操作发生时自动触发一些行为,例如运行测试、部署服务等等。然而,安全性始终是我们需要考虑的问题。如果没有正确地保护我们的 Webhook,那么黑客可能会利用这一漏洞来攻击我们的系统。在本文中,我们介绍一个名为 secure-github-webhook 的 npm 包,以及如何使用它来保护您的 GitHub Webhook。
npm 包 secure-github-webhook 简介
secure-github-webhook 是一个开源的 npm 包,它提供了一种简单且可靠的方法来保护您的 GitHub Webhook。它使用 SHA1 算法对传入的 Webhook payload 进行计算,然后将计算结果与 GitHub 提供的签名进行比对。如果签名匹配,那么 Webhook 就是来自于 GitHub 的,否则请求将被拒绝。这种方法称为“签名校验”。
安装 secure-github-webhook
要在您的项目中使用 secure-github-webhook,您需要首先安装它。您可以使用以下命令来安装:
npm install secure-github-webhook
使用 secure-github-webhook
当您已经安装了 secure-github-webhook 后,就可以开始使用它来保护您的 GitHub Webhook 了。以下是一个简单的示例:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- ------------------- - --------------------------------- ----- --- - ---------- ----- ---- - ----- --------------------------- -------------------- ----------------------------------- ----- ---- -- - -- ----- ------ ------- ----- --- ---------------- -- -- - ------------------- --------- -- ---- ----------- ---
在这个例子中,我们创建了一个 express 应用程序,并将 secure-github-webhook 导入了它。我们定义了一个针对 GitHub Webhook 的 POST 路由,路径为 “/webhook”。我们通过将“secret_key”作为参数传递给 verifyGithubWebhook() 函数来启用签名校验。如果校验失败,请求将不会被处理。否则,我们在回调函数中处理请求。
secure-github-webhook 的高级用法
secure-github-webhook 提供了一些高级用法,可以满足一些特定的需求。以下是其中的一些示例。
获取签名
如果您想要手动获取 GitHub Webhook 的签名,您可以使用以下代码:
const { getSignature } = require("secure-github-webhook"); const signature = getSignature(payload, secret);
其中,payload 是进行签名计算的数据,secret 是 GitHub Webhook 的 secret key。
延迟校验
如果您希望在完全处理 Webhook 请求之前进行更多的校验(例如验证 sender 或 repository),您可以使用 delayVerify 选项。以下是示例代码:
-- -------------------- ---- ------- ----- ------- - - ------------ ----- ------- ------------ -- ----- - --------------- - - ------------------------------------------ -------------------- ----- ---- -- - ----- -------- - -------------------------- -- ---------- - -- ------ - ---
在这里,我们将 delayVerify 选项设置为 true,这意味着我们可以在处理 GitHub Webhook 之前先获取签名并执行其他校验。只有在验证通过后,我们才会继续处理 Webhook 请求。
仅校验指定事件
如果您只想验证某些事件,而不是所有事件,您可以使用 verifyEvent 选项,例如:
const options = { verifyEvent: ["push", "pull_request"], secret: "secret_key" }; const { verifySignature } = require("secure-github-webhook")(options);
在这个例子中,我们只验证 push 和 pull_request 事件。其他事件将被忽略。
结论
secure-github-webhook 让我们可以非常容易地保护我们的 GitHub Webhook,从而防止黑客攻击。它提供了简单的接口和许多配置选项。希望本文提供的教程和示例代码能够帮助您在自己的项目中使用 secure-github-webhook。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005662f81e8991b448e2109