GitHub เพิ่ม IP webhook 48 ที่อยู่ แต่ยังต้องตรวจลายเซ็น

Dev
ยอดดู 3

เปิด pull request แล้วบอต deployment กลับเงียบ คำขออาจถูกไฟร์วอลล์ปฏิเสธก่อนถึงแอป ประกาศ GitHub วันที่ 29 ตุลาคมเกี่ยวข้องกับเส้นทางขาเข้านี้

สามช่วงใหม่สำหรับฝั่งรับ

CIDR ใหม่คือ 9.234.98.160/28, 9.234.98.176/28 และ 9.234.106.48/28 ใช้กับ webhook จาก github.com ทุกแผนรวม GitHub Enterprise Cloud หากใช้รายการอนุญาตแบบคงที่ ให้เพิ่มโดยคงช่วงเดิมไว้

แต่ละ /28 มี 16 ที่อยู่ รวม 48 ภาพแสดงผลคำนวณจริงในเครื่องด้วย Python ipaddress ไม่ใช่จำนวนบัญชีหรือเซิร์ฟเวอร์ GitHub ระบุว่าผู้ที่อัปเดตรายการจาก hooks ของ GET /meta อยู่แล้วไม่ต้องเปลี่ยนเพิ่มสำหรับครั้งนี้

ภาพจัดทำเองจากการคำนวณ Python จริง: /28 สามช่วงมีรวม 48 ที่อยู่
ภาพจัดทำเองจากการคำนวณ Python จริง: /28 สามช่วงมีรวม 48 ที่อยู่

IP กับลายเซ็นตอบคนละคำถาม

รายการอนุญาตกำหนดว่าเครือข่ายใดเข้าถึงฝั่งรับได้ ต้องใช้ hooks ไม่ใช่ actions ซึ่งเป็นอีกเส้นทางของ runner การรับเหตุการณ์กับการเรียก API ภายนอกจาก CI มีทิศทางต่างกัน

จากนั้นตรวจ X-Hub-Signature-256 ด้วย secret ของ webhook นั้น GitHub สร้าง HMAC-SHA256 จาก secret และเนื้อหา ให้คำนวณจากไบต์ต้นฉบับและเปรียบเทียบแบบเวลาคงที่ เช่น hmac.compare_digest หรือ crypto.timingSafeEqual แม้ IP ผ่านก็ยังต้องตรวจ

JSON ความหมายเดิมแต่อาจเป็นคนละไบต์

แปลง {"action":"opened"} เป็น {"action": "opened"} จะเพิ่มช่องว่าง ความหมายเหมือนเดิมแต่ลายเซ็นอาจไม่ตรง ตัวอย่างในเครื่องใช้ secret สาธารณะสำหรับสาธิต ผลไบต์เดิมเป็น True และเมื่อเพิ่มช่องว่างเป็น False ไม่ใช่การจับ webhook จริงจาก GitHub

ตัวอย่าง HMAC ที่รันในเครื่องด้วย secret สาธารณะสำหรับสาธิต ช่องว่างหนึ่งตัวเปลี่ยนไบต์ ไม่ใช่ภาพจับ webhook จริง
ตัวอย่าง HMAC ที่รันในเครื่องด้วย secret สาธารณะสำหรับสาธิต ช่องว่างหนึ่งตัวเปลี่ยนไบต์ ไม่ใช่ภาพจับ webhook จริง

เก็บเนื้อหาดิบก่อนแปลง และตรวจว่าพร็อกซีหรือเฟรมเวิร์กแก้ไขหรือไม่ การใส่ secret ใน URL ของ payload จะเพิ่มช่องทางรั่วไหล ควรเก็บในค่าตั้งเซิร์ฟเวอร์ที่ปลอดภัย

กู้คืนโดยไม่ทำงานที่เสร็จแล้วซ้ำ

เมื่อแก้เครือข่ายแล้วให้ดูรายการส่งล้มเหลวและส่งซ้ำเท่าที่จำเป็น X-GitHub-Delivery ยังคงเดิมในการส่งซ้ำที่ร้องขอ จึงต้องแยกงานเสร็จจากงานล้มเหลวที่ทำต่อได้ การทิ้งทุก ID ที่เคยพบอาจขัดขวางการกู้คืน

GitHub แนะนำตอบ 2XX ภายในสิบวินาทีและใช้คิวสำหรับงานนาน เชื่อมการตรวจลายเซ็น การรับที่จัดเก็บถาวร และสถานะที่ลองใหม่ได้ เพื่อเห็นเส้นทางตั้งแต่มาถึง ตรวจสอบ จนงานเสร็จ

แหล่งข้อมูลและอ่านต่อ

GitHub Changelog · 2026-10-29

GitHub Docs · Meta API

GitHub Docs · Webhook signatures

GitHub Docs · Webhook best practices

다른 글