OWASP Top 10:2025 สำหรับเว็บแอปพลิเคชัน
คู่มือเชิงปฏิบัติสำหรับ 10 หมวดความเสี่ยงใน OWASP Top 10:2025 ฉบับปัจจุบัน ใช้ประกอบการกำหนดขอบเขตการทดสอบเว็บแอปพลิเคชัน วางแผนแก้ไข และเชื่อมโยงผลการทดสอบกับหมวดหมู่ทางการของ OWASP
ฉบับ 2025; ใช้ชื่อหมวดความเสี่ยงตามเอกสาร OWASP ทางการ
A01:2025
Broken Access Control
Broken Access Control คือระบบยอมให้ผู้ใช้ทำสิ่งที่บทบาทหรือความเป็นเจ้าของข้อมูลไม่ควรอนุญาต แม้ผู้ใช้จะล็อกอินถูกต้องก็ตาม เช่น เปลี่ยน ID ใน URL แล้วเปิดใบแจ้งหนี้ของคนอื่น หรือเรียก API สำหรับผู้ดูแลโดยตรง การซ่อนปุ่มบนหน้าเว็บไม่ใช่การป้องกัน เพราะผู้โจมตียังส่งคำขอไปยังเซิร์ฟเวอร์ได้เอง.
| สิ่งที่อาจผิดพลาด | กฎการอนุญาตสิทธิ์ไม่ได้บังคับใช้อย่างสม่ำเสมอว่าผู้ใช้ที่ยืนยันตัวตนแล้วสามารถดู แก้ไข อนุมัติ หรือดูแลข้อมูลใดได้ |
|---|---|
| ผลกระทบต่อธุรกิจ | ผู้ใช้อาจเข้าถึงข้อมูลของลูกค้ารายอื่น เรียกใช้คำสั่งสำหรับผู้ดูแล หรือข้ามขั้นตอนของกระบวนการทำงานได้ |
| จุดควบคุมแรกที่ควรตรวจ | บังคับใช้การตรวจสิทธิ์กับทุกคำขอฝั่งเซิร์ฟเวอร์ |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
ผู้ใช้อาจเข้าถึงข้อมูลของลูกค้ารายอื่น เรียกใช้คำสั่งสำหรับผู้ดูแล หรือข้ามขั้นตอนของกระบวนการทำงานได้
แนวทางลดความเสี่ยง
- บังคับใช้การตรวจสิทธิ์กับทุกคำขอฝั่งเซิร์ฟเวอร์
- ปฏิเสธเป็นค่าเริ่มต้นและทดสอบขอบเขตของออบเจ็กต์ ฟังก์ชัน และผู้เช่า
- บันทึกความล้มเหลวของการควบคุมสิทธิ์และทบทวนเส้นทางสิทธิ์สูง
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A02:2025
Security Misconfiguration
Security Misconfiguration คือความเสี่ยงที่เกิดจากการตั้งค่าระบบไม่ปลอดภัย ไม่ใช่บั๊กในโค้ดโดยตรง เช่น เปิด debug ไว้ใน production, ใช้บัญชีหรือรหัสผ่านเริ่มต้น, เปิด bucket สาธารณะ หรือให้ CORS กว้างเกินจำเป็น การตั้งค่าหนึ่งจุดอาจทำให้ข้อมูลหรือฟังก์ชันที่ควรอยู่หลังขอบเขตความปลอดภัยถูกเข้าถึงได้.
| สิ่งที่อาจผิดพลาด | ค่าเริ่มต้นที่ไม่ปลอดภัย ฟีเจอร์ที่ไม่จำเป็น การตั้งค่าคลาวด์ที่เปิดกว้าง หรือการ hardening ที่ขาดหายทำให้ระบบเปิดรับความเสี่ยง |
|---|---|
| ผลกระทบต่อธุรกิจ | หน้า debug ข้อความผิดพลาดละเอียด พื้นที่เก็บข้อมูลที่เปิดเผย หรือนโยบายเบราว์เซอร์ที่อ่อนแออาจเปิดเผยข้อมูลหรือสร้างช่องทางเข้าที่ไม่ตั้งใจ |
| จุดควบคุมแรกที่ควรตรวจ | รักษา baseline การตั้งค่าที่ hardened และมีเวอร์ชัน |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
หน้า debug ข้อความผิดพลาดละเอียด พื้นที่เก็บข้อมูลที่เปิดเผย หรือนโยบายเบราว์เซอร์ที่อ่อนแออาจเปิดเผยข้อมูลหรือสร้างช่องทางเข้าที่ไม่ตั้งใจ
แนวทางลดความเสี่ยง
- รักษา baseline การตั้งค่าที่ hardened และมีเวอร์ชัน
- นำบริการ บัญชี header และเนื้อหาตัวอย่างที่ไม่ใช้ออก
- ทบทวนการตั้งค่าคลาวด์ เซิร์ฟเวอร์ และเบราว์เซอร์อย่างต่อเนื่อง
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A03:2025
Software Supply Chain Failures
Software Supply Chain Failures คือความเชื่อมั่นในแพ็กเกจ, dependency, ระบบ build หรือช่องทางอัปเดตที่ไม่ถูกควบคุมเพียงพอ หากไลบรารีถูกฝังโค้ดอันตราย หรือ token สำหรับ release รั่ว ซอฟต์แวร์ที่ส่งถึงลูกค้าอาจถูกแก้ไขได้แม้ทีมพัฒนาไม่ได้เขียนบั๊กนั้นเอง.
| สิ่งที่อาจผิดพลาด | แพ็กเกจภายนอก ระบบ build ช่องทางอัปเดต และ dependency ไม่ได้รับการกำกับดูแลเพียงพอที่จะรักษาความถูกต้องสมบูรณ์ |
|---|---|
| ผลกระทบต่อธุรกิจ | คอมโพเนนต์ที่ถูกโจมตีหรือมีช่องโหว่อาจเข้าสู่ production ได้ แม้โค้ดขององค์กรเองจะถูกต้อง |
| จุดควบคุมแรกที่ควรตรวจ | จัดทำบัญชี dependency และตรึงเวอร์ชันที่เชื่อถือได้ |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
คอมโพเนนต์ที่ถูกโจมตีหรือมีช่องโหว่อาจเข้าสู่ production ได้ แม้โค้ดขององค์กรเองจะถูกต้อง
แนวทางลดความเสี่ยง
- จัดทำบัญชี dependency และตรึงเวอร์ชันที่เชื่อถือได้
- ตรวจสอบที่มาและปกป้องข้อมูลลับของ build และ release
- ติดตามประกาศช่องโหว่และระบุผู้รับผิดชอบการแก้ไขให้ชัดเจน
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A04:2025
Cryptographic Failures
Cryptographic Failures คือการปกป้องข้อมูลสำคัญด้วยการเข้ารหัสหรือการจัดการกุญแจที่ไม่เหมาะสม เช่น ส่งข้อมูลผ่านช่องทางที่ไม่ปลอดภัย, ใช้อัลกอริทึมล้าสมัย, เก็บ key ไว้กับข้อมูล หรือไม่เข้ารหัส backup ผลคือผู้ที่ดักฟังหรือเข้าถึงสื่อเก็บข้อมูลอาจอ่านข้อมูลส่วนบุคคล รหัสผ่าน หรือข้อมูลธุรกิจได้.
| สิ่งที่อาจผิดพลาด | ข้อมูลสำคัญถูกเปิดเผยเพราะการเข้ารหัส การจัดการกุญแจ การเลือกโปรโตคอล หรือการจัดชั้นข้อมูลไม่เพียงพอ |
|---|---|
| ผลกระทบต่อธุรกิจ | ข้อมูลส่วนบุคคล credential ข้อมูลการชำระเงิน หรือข้อมูลธุรกิจลับอาจถูกเปิดเผยระหว่างส่ง ขณะเก็บ หรือผ่านข้อมูลสำรอง |
| จุดควบคุมแรกที่ควรตรวจ | จัดชั้นข้อมูลสำคัญและลดการเก็บรวมถึงระยะเวลาการเก็บรักษา |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
ข้อมูลส่วนบุคคล credential ข้อมูลการชำระเงิน หรือข้อมูลธุรกิจลับอาจถูกเปิดเผยระหว่างส่ง ขณะเก็บ หรือผ่านข้อมูลสำรอง
แนวทางลดความเสี่ยง
- จัดชั้นข้อมูลสำคัญและลดการเก็บรวมถึงระยะเวลาการเก็บรักษา
- ใช้โปรโตคอลปัจจุบันและไลบรารีเข้ารหัสที่ผ่านการตรวจสอบ
- ปกป้อง หมุนเวียน และแยกกุญแจออกจากข้อมูลที่เข้ารหัส
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A05:2025
Injection
Injection เกิดเมื่อแอปพลิเคชันนำข้อมูลที่ผู้ใช้ควบคุมได้ไปต่อเป็นคำสั่งหรือ query จนระบบปลายทางตีความข้อมูลนั้นเป็นส่วนหนึ่งของภาษา เช่น SQL, shell, LDAP หรือ template แทนที่จะเป็นข้อมูลธรรมดา ผู้โจมตีจึงอาจเปลี่ยนความหมายของคำสั่ง อ่านข้อมูลเพิ่ม หรือสั่งงานที่ไม่ได้อยู่ในหน้าจอปกติ.
| สิ่งที่อาจผิดพลาด | ข้อมูลนำเข้าที่ไม่น่าเชื่อถือถูกตีความเป็นคำสั่ง query template หรือ expression โดยคอมโพเนนต์ปลายทาง |
|---|---|
| ผลกระทบต่อธุรกิจ | ผู้โจมตีอาจเปลี่ยน query ฐานข้อมูล คำสั่งแอปพลิเคชัน การค้นหาไดเรกทอรี หรือหน้าเว็บที่ render เกินกว่าคำขอที่ตั้งใจ |
| จุดควบคุมแรกที่ควรตรวจ | ใช้ interface แบบ parameterized และ encoder ตามบริบท |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
ผู้โจมตีอาจเปลี่ยน query ฐานข้อมูล คำสั่งแอปพลิเคชัน การค้นหาไดเรกทอรี หรือหน้าเว็บที่ render เกินกว่าคำขอที่ตั้งใจ
แนวทางลดความเสี่ยง
- ใช้ interface แบบ parameterized และ encoder ตามบริบท
- ใช้การตรวจสอบแบบ allow-list ที่ขอบเขตความเชื่อถือ
- กำหนดสิทธิ์ของแอปพลิเคชันเท่าที่จำเป็นเท่านั้น
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A06:2025
Insecure Design
Insecure Design คือช่องว่างที่อยู่ในกติกาของผลิตภัณฑ์หรือ workflow ตั้งแต่ก่อนเขียนโค้ด ไม่ใช่เพียงเขียนโค้ดผิด ตัวอย่างเช่น ระบบอนุมัติวงเงินโดยไม่มีการแบ่งหน้าที่, ขั้นตอนกู้บัญชีที่ยืนยันตัวตนอ่อนเกินไป หรือไม่มีข้อจำกัดการใช้งานผิดวัตถุประสงค์ โค้ดที่ทำตามข้อกำหนดได้ครบก็ยังอาจไม่ปลอดภัย.
| สิ่งที่อาจผิดพลาด | การออกแบบผลิตภัณฑ์ขาดข้อกำหนดด้านความปลอดภัย กรณีใช้งานผิดวัตถุประสงค์ หรือการควบคุมที่จำเป็นต่อ workflow ทางธุรกิจ |
|---|---|
| ผลกระทบต่อธุรกิจ | แม้โค้ดจะพัฒนาได้ถูกต้อง ระบบอาจเอื้อต่อการทุจริต ข้ามขีดจำกัดการอนุมัติ หรือกู้คืนบัญชีที่ไม่ปลอดภัยจากการออกแบบ |
| จุดควบคุมแรกที่ควรตรวจ | จำลองกรณีใช้งานผิดวัตถุประสงค์และความล้มเหลวของกฎธุรกิจก่อนพัฒนา |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
แม้โค้ดจะพัฒนาได้ถูกต้อง ระบบอาจเอื้อต่อการทุจริต ข้ามขีดจำกัดการอนุมัติ หรือกู้คืนบัญชีที่ไม่ปลอดภัยจากการออกแบบ
แนวทางลดความเสี่ยง
- จำลองกรณีใช้งานผิดวัตถุประสงค์และความล้มเหลวของกฎธุรกิจก่อนพัฒนา
- กำหนดเกณฑ์ยอมรับด้านความปลอดภัยสำหรับเส้นทางสำคัญ
- ใช้ threat modeling และการทบทวนการออกแบบโดยอิสระ
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A07:2025
Authentication Failures
Authentication Failures คือระบบพิสูจน์หรือรักษาตัวตนผู้ใช้ได้ไม่มั่นคง เช่น รับรหัสผ่านที่เดาง่าย, จัดการ session ไม่ถูกต้อง, ไม่จำกัดการลองเข้าสู่ระบบ หรือให้กู้บัญชีด้วยข้อมูลที่หาได้ง่าย ความผิดพลาดนี้ทำให้ผู้โจมตีสวมรอยเป็นผู้ใช้อื่นและเข้าถึงสิทธิ์ทั้งหมดของบัญชีนั้น.
| สิ่งที่อาจผิดพลาด | การพิสูจน์ตัวตน การจัดการ session การกู้คืนบัญชี หรือการป้องกัน credential ไม่สามารถยืนยันและรักษาตัวตนผู้ใช้ที่ถูกต้องได้อย่างเชื่อถือได้ |
|---|---|
| ผลกระทบต่อธุรกิจ | ผู้โจมตีอาจยึดบัญชี ใช้ session ซ้ำ หรือใช้ช่องโหว่ของการกู้คืนบัญชีเพื่อกระทำการแทนผู้ใช้อื่น |
| จุดควบคุมแรกที่ควรตรวจ | ใช้ MFA ที่ต้าน phishing ได้เมื่อความเสี่ยงเหมาะสม |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
ผู้โจมตีอาจยึดบัญชี ใช้ session ซ้ำ หรือใช้ช่องโหว่ของการกู้คืนบัญชีเพื่อกระทำการแทนผู้ใช้อื่น
แนวทางลดความเสี่ยง
- ใช้ MFA ที่ต้าน phishing ได้เมื่อความเสี่ยงเหมาะสม
- หมุนเวียน session หลังเข้าสู่ระบบและหลังเปลี่ยนข้อมูลสำคัญ
- จำกัดอัตรา ติดตาม และออกแบบขั้นตอนกู้คืนบัญชีอย่างปลอดภัย
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A08:2025
Software or Data Integrity Failures
Software or Data Integrity Failures คือการเชื่อโค้ด, อัปเดต, ข้อมูลภายนอก หรือออบเจ็กต์ที่ serialize แล้ว โดยไม่ได้พิสูจน์ว่าไม่ถูกแก้ไขระหว่างทาง เช่น รับ update ที่ไม่ตรวจลายเซ็น หรือรับข้อมูลจาก webhook โดยไม่ตรวจแหล่งที่มา ผลกระทบอาจเป็นการเปลี่ยนข้อมูลธุรกิจหรือรันโค้ดที่องค์กรไม่ได้อนุมัติ.
| สิ่งที่อาจผิดพลาด | แอปพลิเคชันเชื่อถือโค้ด อัปเดต ออบเจ็กต์ที่ serialized หรือข้อมูลจากขอบเขตที่ยังไม่ได้ตรวจสอบความถูกต้องสมบูรณ์ |
|---|---|
| ผลกระทบต่อธุรกิจ | ข้อมูลที่ถูกแก้ไขหรืออัปเดตที่ไม่น่าเชื่อถืออาจเปลี่ยนพฤติกรรมแอปพลิเคชัน ข้อมูลธุรกิจ หรือซอฟต์แวร์ที่ส่งมอบให้ผู้ใช้ |
| จุดควบคุมแรกที่ควรตรวจ | ตรวจสอบลายเซ็นและที่มาของโค้ดกับอัปเดต |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
ข้อมูลที่ถูกแก้ไขหรืออัปเดตที่ไม่น่าเชื่อถืออาจเปลี่ยนพฤติกรรมแอปพลิเคชัน ข้อมูลธุรกิจ หรือซอฟต์แวร์ที่ส่งมอบให้ผู้ใช้
แนวทางลดความเสี่ยง
- ตรวจสอบลายเซ็นและที่มาของโค้ดกับอัปเดต
- ถือว่าข้อมูล serialized และข้อมูลภายนอกไม่น่าเชื่อถือ
- ปกป้องการอนุมัติ CI/CD และตรวจสอบการเปลี่ยนแปลงของ release
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A09:2025
Security Logging & Alerting Failures
Security Logging & Alerting Failures คือเหตุการณ์สำคัญเกิดขึ้นแล้วไม่มีหลักฐานหรือไม่มีใครรับรู้ทันเวลา เช่น ไม่มี log การเปลี่ยนสิทธิ์, log ถูกแก้ไขได้, ไม่มีการเชื่อมโยงเหตุการณ์ หรือ alert ส่งไปยังทีมที่ไม่สามารถตอบสนองได้ ผลคือการบุกรุกอยู่นานขึ้นและทีมย้อนหาว่าเกิดอะไรขึ้นกับข้อมูลใดไม่ได้.
| สิ่งที่อาจผิดพลาด | เหตุการณ์ด้านความปลอดภัยที่สำคัญไม่ได้รับการบันทึก ปกป้อง เชื่อมโยง หรือดำเนินการอย่างทันท่วงที |
|---|---|
| ผลกระทบต่อธุรกิจ | การบุกรุกอาจดำเนินต่อได้นานขึ้น เพราะผู้ตรวจสอบไม่สามารถย้อนรอยกิจกรรมหรือผู้ตอบสนองไม่ได้รับการแจ้งเตือนที่ใช้งานได้ |
| จุดควบคุมแรกที่ควรตรวจ | บันทึกเหตุการณ์การยืนยันตัวตน การตรวจสิทธิ์ ผู้ดูแล และธุรกรรมธุรกิจมูลค่าสูง |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
การบุกรุกอาจดำเนินต่อได้นานขึ้น เพราะผู้ตรวจสอบไม่สามารถย้อนรอยกิจกรรมหรือผู้ตอบสนองไม่ได้รับการแจ้งเตือนที่ใช้งานได้
แนวทางลดความเสี่ยง
- บันทึกเหตุการณ์การยืนยันตัวตน การตรวจสิทธิ์ ผู้ดูแล และธุรกรรมธุรกิจมูลค่าสูง
- ปกป้องความถูกต้องของ log และกำหนดเกณฑ์แจ้งเตือนที่ใช้ได้จริง
- ฝึกตอบสนองเหตุการณ์ด้วย telemetry ที่เป็นตัวแทนของระบบจริง
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }A10:2025
Mishandling of Exceptional Conditions
Mishandling of Exceptional Conditions คือระบบจัดการ error, timeout, retry, ภาระงานเกิน หรือสถานะผิดปกติแบบไม่ปลอดภัยหรือไม่สอดคล้องกัน เช่น timeout แล้วอนุมัติธุรกรรมซ้ำ, dependency ล่มแล้วข้ามการตรวจสิทธิ์ หรือคืนข้อความภายในให้ผู้ใช้เห็น เส้นทางที่ไม่ใช่ happy path จึงกลายเป็นช่องทางที่กระทบข้อมูลหรือธุรกิจได้.
| สิ่งที่อาจผิดพลาด | ความล้มเหลว timeout ภาระงานเกิน และสถานะที่ไม่คาดคิดได้รับการจัดการไม่สม่ำเสมอหรือเปิดให้ผ่านได้ |
|---|---|
| ผลกระทบต่อธุรกิจ | เส้นทางเมื่อเกิดข้อผิดพลาดอาจเปิดเผยรายละเอียด สร้างธุรกรรมซ้ำ ลดความเข้มของการตรวจสิทธิ์ หรือทำให้ผู้ใช้อยู่ในสถานะที่ทำให้เข้าใจผิด |
| จุดควบคุมแรกที่ควรตรวจ | ล้มเหลวอย่างปลอดภัยด้วยการจัดการข้อผิดพลาดและข้อความผู้ใช้ที่สม่ำเสมอ |
ผู้โจมตี เหยื่อ แอปพลิเคชัน จุดควบคุม

ภาพเปรียบเทียบเส้นทางที่ไม่ปลอดภัยกับจุดควบคุมที่ตัดเส้นทางนั้น กดภาพเพื่อดูขนาดเต็ม.
ผลกระทบที่ควรพิจารณา
เส้นทางเมื่อเกิดข้อผิดพลาดอาจเปิดเผยรายละเอียด สร้างธุรกรรมซ้ำ ลดความเข้มของการตรวจสิทธิ์ หรือทำให้ผู้ใช้อยู่ในสถานะที่ทำให้เข้าใจผิด
แนวทางลดความเสี่ยง
- ล้มเหลวอย่างปลอดภัยด้วยการจัดการข้อผิดพลาดและข้อความผู้ใช้ที่สม่ำเสมอ
- ทำให้การดำเนินการสำคัญ idempotent และจำกัดด้วย timeout
- ทดสอบ dependency ที่เสื่อมสภาพ การ retry และการกู้คืนสถานะ
ตัวอย่างโค้ดภาษา Go ที่พัฒนาเว็บด้วย Fiber v3
// ตัวอย่างที่มีช่องโหว่: trust request-controlled target
app.Get("/records/:id", func(c fiber.Ctx) error {
return c.JSON(repo.Find(c.Params("id")))
})
// ตัวอย่างที่แก้ไขแล้ว: authorize server-side
if !policy.CanRead(c.Locals("principal"), id) { return fiber.ErrForbidden }
