Web Security

CORS คืออะไร และตั้งค่านโยบายอย่างไร

A
admin
5 กุมภาพันธ์ 2569 0 ครั้ง
แชร์:

CORS คืออะไร

Cross-Origin Resource Sharing (CORS) เป็นกลไกที่เบราว์เซอร์ใช้ถามเซิร์ฟเวอร์ว่าต้นทางอื่นอ่านคำตอบได้หรือไม่ โดยค่าเริ่มต้น same-origin policy ห้ามหน้าจาก origin หนึ่งอ่านผลลัพธ์จาก origin อื่น เอกสารใช้งานอยู่ที่ MDN CORS และข้อกำหนดที่ WHATWG Fetch

Simple request กับ preflight

คำขอบางชนิด (เช่น GET บางชุด header) ถูกส่งเลย แล้วเบราว์เซอร์ตัดสินจาก Access-Control-Allow-Origin ในคำตอบ

คำขอที่ซับซ้อนกว่าจะส่ง OPTIONS ก่อน (preflight) โดยมี Access-Control-Request-Method และ Access-Control-Request-Headers เซิร์ฟเวอร์ต้องตอบ Access-Control-Allow-Methods และ Access-Control-Allow-Headers ให้ตรง

สิ่งที่ CORS ไม่ได้ทำ

CORS ไม่ใช่ไฟร์วอลล์ของ API คำขอจาก curl, แอปมือถือ หรือเซิร์ฟเวอร์อื่นยังเรียกได้ ต้องมีการยืนยันตัวตน, CSRF control และการตรวจสิทธิ์ฝั่งเซิร์ฟเวอร์ตาม OWASP

การตั้งค่าที่ปลอดภัยกว่า

  • ระบุ origin จริงใน Access-Control-Allow-Origin อย่าใช้ * คู่กับ Access-Control-Allow-Credentials: true (เบราว์เซอร์จะปฏิเสธอยู่แล้ว)
  • อย่าสะท้อนค่า Origin ทุกค่าโดยไม่ตรวจรายการอนุญาต
  • จำกัดเมธอดและเฮดเดอร์เท่าที่ API ใช้
code
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Credentials: true
Vary: Origin

Vary: Origin สำคัญเมื่อแคช reverse proxy เก็บคำตอบต่อ origin

สรุป

CORS เป็นสัญญาฝั่งเบราว์เซอร์ระหว่างหน้าเว็บกับ API ไม่ใช่การล็อก API จากอินเทอร์เน็ต ออกแบบรายการ origin ให้แคบที่สุด

แหล่งอ้างอิง

หมวดหมู่: Web Security