ข้ามไปเนื้อหาหลัก

วิธีป้องกัน Webhook Replay Attack ใน Node.js ด้วย PostgreSQL

เจาะลึกวิธีบล็อกการโจมตีเว็บฮุกซ้ำซ้อนและการส่งคำขอเบิ้ลด้วยระบบฐานข้อมูล PostgreSQL และ Node.js พร้อมโค้ด SQL และมิดเดิลแวร์ Express

เรียบเรียงโดย AI
Inewgen
22 Aug 2026ที่มา: Dev.to2 นาทีอ่าน (0 ครั้ง)อัปเดตล่าสุด 29 Aug 2026
แชร์
วิธีป้องกัน Webhook Replay Attack ใน Node.js ด้วย PostgreSQL

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • การตรวจสอบลายเซ็น (Signature) อย่างเดียวไม่เพียงพอต่อการป้องกัน Replay Attack
  • การใช้ฐานข้อมูล PostgreSQL ร่วมกับ Unique Constraint ช่วยป้องกันคำขอซ้ำได้ระดับฮาร์ดแวร์
  • การสร้างตาราง processed_webhooks และ Index ช่วยให้ค้นหาเหตุการณ์ที่เคยประมวลผลแล้วได้อย่างรวดเร็ว
  • ระบบมิดเดิลแวร์ใน Express ช่วยคัดกรองข้อมูลก่อนส่งต่อไปยังส่วนประมวลผลหลัก

การจัดการเว็บฮุกสำหรับระบบชำระเงินอาจดูเป็นเรื่องง่าย จนกระทั่งเซิร์ฟเวอร์ของคุณต้องเจอกับปัญหานโยบายส่งข้อมูลซ้ำจากเครือข่ายถึง 3 ครั้งติด หรือถูกผู้ไม่หวังดีดักจับข้อมูลที่ถูกต้องแล้วนำกลับมาส่งซ้ำเพื่อพยายามเพิ่มยอดเงินในบัญชีของตนเองสองครั้ง การตรวจสอบลายเซ็นถือเป็นขั้นตอนแรกที่สำคัญ แต่ก็ยังไม่สามารถป้องกันการโจมตีแบบ Replay Attack ที่นำข้อมูลที่ถูกต้องแต่เคยส่งไปแล้วกลับมารisend ใหม่ได้ บทความนี้จะมาแนะนำวิธีการสร้างระบบป้องกันหลายชั้นด้วย Node.js และ PostgreSQL เพื่อให้มั่นใจว่าทุก ๆ เพย์โหลดของเว็บฮุกจะถูกประมวลผลเพียงครั้งเดียวเท่านั้น

แม้ว่านักพัฒนาหลายคนอาจเลือกใช้ Redis ในการจัดเก็บรหัสเหตุการณ์ที่ประมวลผลแล้ว แต่หากระบบแคชเกิดการล้างข้อมูล (Flush) หรือคอนเทนเนอร์รีสตาร์ทในช่วงที่มีปริมาณการใช้งานหนาแน่น คุณก็อาจสูญเสียสถานะข้อมูลเหล่านั้นไปได้ การหันมาใช้ PostgreSQL พร้อมกับฟีเจอร์ Unique Constraint จึงเข้ามาช่วยรับประกันความปลอดภัยในระดับฐานข้อมูลได้อย่างแท้จริง หากมีคำขอที่เหมือนกันเป๊ะสองรายการวิ่งเข้ามาที่แบ็กเอนด์ในเสี้ยววินาทีเดียวกัน ระบบล็อกของ Postgres จะจัดการระงับและตัดรายการที่ซ้ำออกไปทันที

การเลือกใช้ฐานข้อมูลเชิงสัมพันธ์อย่าง PostgreSQL แทนแคชความเร็วสูงอย่าง Redis ในกรณีนี้ มีจุดเด่นสำคัญคือความคงทนของข้อมูล (Durability) ที่เหนือกว่า แม้เซิร์ฟเวอร์จะล่มกะทันหัน ข้อมูลประวัติการรับเว็บฮุกจะไม่หายไป ช่วยป้องกันความเสี่ยงเรื่องการจ่ายเงินซ้ำซ้อนซึ่งเป็นหัวใจสำคัญของระบบฟินเทค

สำหรับการสร้างโครงสร้างฐานข้อมูล นักพัฒนาสามารถนำชุดคำสั่ง SQL ด้านล่างนี้ไปปรับใช้เพื่อติดตามเหตุการณ์เว็บฮุกที่เข้ามาในระบบได้ทันที:

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

  • สร้างตาราง processed_webhooks พร้อมคอลัมน์ id, event_id, signature และ created_at
  • กำหนดค่า UNIQUE บนคอลัมน์ event_id เพื่อป้องกันการบันทึกข้อมูลซ้ำ
  • สร้าง Index บนคอลัมน์ event_id เพื่อเร่งความเร็วในการค้นหาข้อมูลขาเข้า

nodejs code editor laptop programming

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ในส่วนของการพัฒนาฝั่ง Express Middleware ระบบตรวจสอบความปลอดภัยจะทำหน้าที่คัดกรองสิ่งสำคัญสามประการก่อนที่จะอนุญาตให้มีการรันจุดสัมผัสข้อมูล (Touch Point Execution) การออกแบบความปลอดภัยของเว็บฮุกในลักษณะนี้จะช่วยปกป้องระบบของคุณได้เป็นอย่างดี แม้ว่าผู้ให้บริการระบบชำระเงินจะทำการส่งข้อมูลซ้ำถี่แค่ไหน หรือผู้ประสงค์ร้ายจะพยายามส่งข้อมูลเก่ากลับมาก็ตาม

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้