ข้ามไปยังเนื้อหา

ความปลอดภัย (Security)

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

flowchart TD
  API --> T[Transport: HTTPS everywhere]
  API --> AuthN[Authentication: who are you?]
  API --> AuthZ[Authorization: what may you do?]
  API --> In[Input: validate everything]
  API --> Ab[Abuse: rate limiting & quotas]
ห้าเรื่องที่ครอบคลุมทั้ง API
  • Transport — ให้บริการผ่าน HTTPS เท่านั้น อย่ารับ credentials ผ่าน HTTP แบบ plain เด็ดขาด
  • Authentication — ระบุว่าผู้เรียกใช้คือใคร (API key, token)
  • Authorization — ตัดสินว่าผู้เรียกใช้คนนั้นทำอะไรได้บ้าง
  • Input — มองทุกไบต์ที่มาจาก client ว่าเชื่อถือไม่ได้ ต้อง validate ทุกครั้ง
  • Abuse — ปกป้อง API จากการถูกถล่มจนล้นหรือถูก scrape ข้อมูล
  • Authn vs authz — ความแตกต่าง และ 401 กับ 403
  • Tokens, JWT & OAuth — bearer token และการมอบสิทธิ์การเข้าถึง (delegated access)
  • CORS — browser ควบคุมการเรียกข้าม origin อย่างไร
  • Rate limiting & validation — การจำกัดอัตราการเรียก และการไม่เชื่ออะไรเลย
ทำไม credentials ถึงต้องไม่อยู่ใน URL เด็ดขาด?
ควรปฏิบัติต่อ input จาก client อย่างไร?