เชิงเทคนิค · คำตอบพร้อมแหล่งอ้างอิง

การตรวจสอบลายเซ็น webhook (Webhook Signature Verification)

การตรวจสอบลายเซ็น webhook เป็นกระบวนการด้านความปลอดภัยที่ผู้รับตรวจสอบลายเซ็นเข้ารหัสที่แนบมากับคำขอ HTTP ขาเข้า เพื่อให้แน่ใจว่า payload ถูกส่งโดยผู้ให้บริการที่เชื่อถือได้และไม่ถูกแก้ไขระหว่างทาง

ความหมาย

การตรวจสอบลายเซ็น webhook เป็นกลไกที่ใช้ยืนยันแหล่งที่มาของอีเวนต์ webhook เมื่อผู้ให้บริการอย่าง Resend หรือ SendGrid ส่งการแจ้งเตือนเกี่ยวกับอีเวนต์อีเมล จะรวมแฮชของ payload ที่ลงลายเซ็นด้วยคีย์ลับ เซิร์ฟเวอร์ผู้รับใช้คีย์ลับเดียวกันคำนวณแฮชใหม่และเปรียบเทียบกับลายเซ็นที่ให้มาในเฮดเดอร์ของคำขอ

กระบวนการทำงาน

ผู้ให้บริการสร้างแฮช HMAC โดยใช้ shared secret และ body ของคำขอ แฮชนี้ถูกส่งในเฮดเดอร์ ซึ่งมักชื่อ X-Signature หรือคล้ายกัน ผู้รับเก็บ body ดิบของคำขอและเฮดเดอร์ลายเซ็น จากนั้นผู้รับคำนวณแฮช HMAC ของตนเองด้วย shared secret หากแฮชที่คำนวณตรงกับค่าในเฮดเดอร์ คำขอเป็นของแท้ หากต่างกัน คำขอจะถูกปฏิเสธว่าไม่ได้รับอนุญาต

ความสำคัญต่อผู้ส่ง

หากไม่มีการตรวจสอบ ใครก็ตามที่รู้ URL ของ webhook ของคุณสามารถส่งข้อมูลปลอมมายังเซิร์ฟเวอร์ได้ ซึ่งอาจนำไปสู่การอัปเดตฐานข้อมูลผิดพลาด เช่น ทำเครื่องหมายอีเมลที่ส่งถึงแล้วว่าตีกลับ การติดตั้งการตรวจสอบช่วยป้องกันการโจมตีแบบปลอมแปลง และทำให้แน่ใจว่าแอปพลิเคชันตอบสนองเฉพาะอีเวนต์ที่ถูกต้องซึ่งเกิดจากโครงสร้างพื้นฐานอีเมลของคุณ

หมายเหตุการใช้งานจริง

ข้อผิดพลาดที่พบบ่อยคือแยกวิเคราะห์ body ของคำขอเป็นอ็อบเจกต์ JSON ก่อนตรวจสอบลายเซ็น เพราะตัวแยกวิเคราะห์ JSON เปลี่ยนช่องว่างหรือลำดับคีย์ได้ สตริงที่ได้จึงอาจไม่ตรงกับ payload ต้นฉบับที่ผู้ให้บริการใช้ ควรใช้ body ดิบของคำขอที่ยังไม่ได้แยกวิเคราะห์เสมอในการคำนวณ HMAC เพื่อหลีกเลี่ยงความล้มเหลวในการตรวจสอบ

ตัวอย่างการนำไปใช้

ในสภาพแวดล้อม Node.js นักพัฒนาจะใช้โมดูล crypto สร้างแฮช hmac sha256 ของ body ดิบด้วยคีย์ลับของผู้ให้บริการ จากนั้นเปรียบเทียบผลลัพธ์กับเฮดเดอร์ลายเซ็นโดยใช้ฟังก์ชันเปรียบเทียบแบบใช้เวลาคงที่ เพื่อป้องกันการโจมตีแบบ timing SendHQ มีเครื่องมือฟรีที่ https://sendhq.cc/tools เพื่อช่วยจัดการการตั้งค่าอีเมลหลายอย่างที่มักทำก่อนการตั้งค่า webhook

คำถามที่ทีมมักถาม

จะเกิดอะไรขึ้นหากคีย์ลับรั่วไหล

หากคีย์ลับถูกเจาะ ผู้โจมตีลงลายเซ็นคำขอปลอมที่เซิร์ฟเวอร์ของคุณยอมรับว่าถูกต้องได้ คุณต้องหมุนเวียนคีย์ลับทันทีในแดชบอร์ดของผู้ให้บริการ และอัปเดตตัวแปรสภาพแวดล้อมของเซิร์ฟเวอร์

HTTPS ทำให้ไม่ต้องตรวจสอบลายเซ็นหรือไม่

ไม่ HTTPS เข้ารหัสข้อมูลระหว่างส่งและยืนยันตัวตนเซิร์ฟเวอร์ แต่ไม่ยืนยันว่าไคลเอนต์ที่ส่งคำขอคือผู้ให้บริการอีเมลที่ได้รับอนุญาตของคุณ

ทำไมใช้ HMAC แทน API key ธรรมดา

ลายเซ็น HMAC พิสูจน์ว่าเนื้อหาข้อความไม่ถูกดัดแปลง ส่วน API key คงที่ในเฮดเดอร์พิสูจน์เพียงว่าผู้ส่งรู้คีย์ ไม่ได้พิสูจน์ว่า payload สมบูรณ์

แหล่งข้อมูลหลัก