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 | หน้า |
|---|---|---|---|
| A01 | Broken Access Control รวม IDOR, BFLA, CSRF, SSRF | บางส่วน CSRF token และการป้องกัน open redirect เปิดไว้แล้ว ส่วน authorization และการจำกัดสิทธิ์รายข้อมูลเป็นหน้าที่ของเรา | 07 08 09 13 18 |
| A02 | Security Misconfiguration โหมด debug, แดชบอร์ด, ค่าเริ่มต้น, header | บางส่วน ค่าเริ่มต้นของ production ดีอยู่แล้ว ส่วนแดชบอร์ดที่ mount, hosts และ CSP เป็นหน้าที่ของเรา | 11 12 19 |
| A03 | Software Supply Chain Failures gem ที่มีช่องโหว่, CDN, CI | หน้าที่เรา แอปใหม่มี Brakeman ใน CI แต่การอัปเดต gem และการ pin สคริปต์เป็นหน้าที่ของเรา | 12 17 |
| A04 | Cryptographic Failures TLS, การจัดเก็บ, คีย์, ความสุ่ม | บางส่วน มี force_ssl, คุกกี้เข้ารหัส, has_secure_password แต่การเข้ารหัสรายฟิลด์ต้องเปิดเอง | 05 12 15 16 |
| A05 | Injection SQL, XSS, คำสั่ง shell, header | บางส่วน ERB escape และ AR parameterize ให้โดยค่าเริ่มต้น แต่ raw/html_safe/การต่อสตริงเป็นความรับผิดชอบของเรา | 02 03 04 |
| A06 | Insecure Design business logic, race condition, threat modeling | หน้าที่เรา ไม่มีอะไรในตัว | 20 |
| A07 | Authentication Failures รหัสผ่าน, session, MFA, brute force | บางส่วน มี auth generator, rate_limit, session ที่ปลอดภัย แต่ MFA และการล็อกบัญชีเป็นหน้าที่ของเรา | 05 06 08 |
| A08 | Software or Data Integrity Failures deserialization, SRI, ข้อมูลที่ไม่ได้ลงนาม | บางส่วน คุกกี้แบบ JSON และ YAML ที่ปลอดภัยเป็นค่าเริ่มต้น แต่ Marshal และสคริปต์จาก CDN เป็นความรับผิดชอบของเรา | 12 14 |
| A09 | Security Logging & Alerting Failures ควร log อะไร, การแจ้งเตือน, การรับมือ | บางส่วน มี request log ที่กรองพารามิเตอร์แล้ว แต่ security event และการแจ้งเตือนเป็นหน้าที่ของเรา | 08 21 |
| A10 | Mishandling of Exceptional Conditions fail-open, ข้อผิดพลาด, ขีดจำกัด | บางส่วน มีหน้า error ทั่วไป และ transaction rollback ให้ แต่ตรรกะแบบ fail-closed เป็นหน้าที่ของเรา | 19 |
ภาพรวม threat model ในภาพเดียว
การโจมตีเกือบทั้งหมดในคู่มือนี้มุ่งเป้าที่เส้นแบ่งความไว้วางใจ (trust boundary) อย่างใดอย่างหนึ่งต่อไปนี้ ชี้หรือแตะที่แต่ละชั้นเพื่อดูรายละเอียด
Browser → Network → Server → Database. Pick a layer.