guest@websec: ~/websec/th — zsh — 100×40 เขียนโดย SaKKo ENTH โค้ด:

guest@websec ~ % cat README

คู่มือความปลอดภัยเว็บแอปพลิเคชัน

คู่มืออบรมความปลอดภัยสำหรับทีม Rails ของเรา แต่ละหัวข้ออธิบายแบบเข้าใจง่าย แล้วบอกตรงๆ ว่า Rails ดูแลให้แล้ว หรือเราต้องทำเอง ท้ายสุดมีแบบทดสอบ 2 ชุด

วิธีใช้คู่มือนี้

  • หนึ่งหัวข้อต่อหน้า ถ้าใช้ประชุมทีม สัปดาห์ละหนึ่งถึงสองหัวข้อกำลังดี ให้อ่านตามลำดับ เพราะบทหลังๆ ต่อยอดจากบทก่อนหน้า
  • กด ▶ เล่น ที่แอนิเมชันเพื่อดูการโจมตีทีละขั้น กล่องสีเขียวคือการจำลองที่ลองเล่นได้
  • ตัวอย่างโค้ดแสดงเป็น Rails โดยค่าเริ่มต้น ปุ่ม code: ที่แถบด้านบนสลับเป็นเวอร์ชัน Node หรือ Python ได้ (ถ้ามี)
  • กล่องสีบอกสถานะของ Rails ในแต่ละหัวข้อ:
Rails จัดการให้ตั้งแต่ติดตั้ง สิ่งที่ต้องรู้คืออย่าไปปิดหรือทำลายมัน
Rails มีเครื่องมือให้ แต่คุณต้องเปิดใช้ ตั้งค่า หรือทำส่วนที่เหลือให้ครบเอง
Rails ไม่ได้ช่วยอะไรในเรื่องนี้ ทั้งหมดขึ้นกับโค้ดและกระบวนการของเรา
ส่วนที่ 1 · เริ่มที่นี่: injection
ส่วนที่ 2 · บัญชีผู้ใช้และการควบคุมสิทธิ์
ส่วนที่ 3 · ไฟล์ เบราว์เซอร์ และ header
ส่วนที่ 4 · ฝั่งเซิร์ฟเวอร์และ secret
ส่วนที่ 5 · การดูแลระบบและการออกแบบ
ส่วนที่ 6 · แบบสอบถาม

OWASP Top 10:2025 โดยสรุป

OWASP Top 10 คือรายการความเสี่ยงเว็บที่ใหญ่ที่สุดที่วงการยอมรับ ตารางนี้บอกว่าแต่ละข้ออยู่หน้าไหน และ Rails ช่วยได้แค่ไหน:

#ความเสี่ยงRailsหน้า
A01Broken Access Control
รวม IDOR, BFLA, CSRF, SSRF
บางส่วน
CSRF token และการป้องกัน open redirect เปิดไว้แล้ว ส่วน authorization และการจำกัดสิทธิ์รายข้อมูลเป็นหน้าที่ของเรา
07 08 09 13 18
A02Security Misconfiguration
โหมด debug, แดชบอร์ด, ค่าเริ่มต้น, header
บางส่วน
ค่าเริ่มต้นของ production ดีอยู่แล้ว ส่วนแดชบอร์ดที่ mount, hosts และ CSP เป็นหน้าที่ของเรา
11 12 19
A03Software Supply Chain Failures
gem ที่มีช่องโหว่, CDN, CI
หน้าที่เรา
แอปใหม่มี Brakeman ใน CI แต่การอัปเดต gem และการ pin สคริปต์เป็นหน้าที่ของเรา
12 17
A04Cryptographic Failures
TLS, การจัดเก็บ, คีย์, ความสุ่ม
บางส่วน
มี force_ssl, คุกกี้เข้ารหัส, has_secure_password แต่การเข้ารหัสรายฟิลด์ต้องเปิดเอง
05 12 15 16
A05Injection
SQL, XSS, คำสั่ง shell, header
บางส่วน
ERB escape และ AR parameterize ให้โดยค่าเริ่มต้น แต่ raw/html_safe/การต่อสตริงเป็นความรับผิดชอบของเรา
02 03 04
A06Insecure Design
business logic, race condition, threat modeling
หน้าที่เรา
ไม่มีอะไรในตัว
20
A07Authentication Failures
รหัสผ่าน, session, MFA, brute force
บางส่วน
มี auth generator, rate_limit, session ที่ปลอดภัย แต่ MFA และการล็อกบัญชีเป็นหน้าที่ของเรา
05 06 08
A08Software or Data Integrity Failures
deserialization, SRI, ข้อมูลที่ไม่ได้ลงนาม
บางส่วน
คุกกี้แบบ JSON และ YAML ที่ปลอดภัยเป็นค่าเริ่มต้น แต่ Marshal และสคริปต์จาก CDN เป็นความรับผิดชอบของเรา
12 14
A09Security Logging & Alerting Failures
ควร log อะไร, การแจ้งเตือน, การรับมือ
บางส่วน
มี request log ที่กรองพารามิเตอร์แล้ว แต่ security event และการแจ้งเตือนเป็นหน้าที่ของเรา
08 21
A10Mishandling of Exceptional Conditions
fail-open, ข้อผิดพลาด, ขีดจำกัด
บางส่วน
มีหน้า error ทั่วไป และ transaction rollback ให้ แต่ตรรกะแบบ fail-closed เป็นหน้าที่ของเรา
19

ภาพรวม threat model ในภาพเดียว

การโจมตีเกือบทั้งหมดในคู่มือนี้มุ่งเป้าที่เส้นแบ่งความไว้วางใจ (trust boundary) อย่างใดอย่างหนึ่งต่อไปนี้ ชี้หรือแตะที่แต่ละชั้นเพื่อดูรายละเอียด

trust boundaryแตะที่ชั้น
Browser → Network → Server → Database. Pick a layer.