เข้าใจเรื่อง CORS และการจัดการด้าน Security CORS คืออะไร?

เข้าใจเรื่อง CORS และการจัดการด้าน Security CORS คืออะไร?

เมื่อไหร่ก็ตามที่คุณทำงานกับ Web development คำว่า "CORS" หรือ "Cross-Origin Resource Sharing" จะโผล่มาให้คุณเห็นอยู่เสมอ CORS เป็นกลไกหนึ่งที่เบราว์เซอร์ใช้เพื่อควบคุมการเข้าถึงทรัพยากรที่อยู่บนโดเมนต่าง ๆ กัน อย่างเช่น เมื่อหน้าเว็บหนึ่งที่โฮสต์บน domainA.com พยายามร้องขอทรัพยากร (เช่น API หรือไฟล์ JSON) จาก domainB.com เบราว์เซอร์จะตรวจสอบสิทธิ์การเข้าถึงตามข้อกำหนดของ CORS

ทำไม CORS ถึงสำคัญในด้าน Security?

CORS ถูกสร้างขึ้นมาเพื่อป้องกันการโจมตีที่เรียกว่า "Cross-Site Request Forgery" (CSRF) และยังช่วยให้ผู้พัฒนาสามารถควบคุมได้ว่าบริการของพวกเขาจะให้ใครเข้าถึงบ้าง บางครั้งเราอยากจำกัดให้เฉพาะโดเมนที่เราไว้ใจเท่านั้นที่เข้าถึง API ของเราได้ การจัดการ CORS ที่ถูกต้องจะช่วยป้องกันไม่ให้โดเมนที่ไม่รู้จักหรือโดเมนที่เราไม่ต้องการสามารถเข้าถึงข้อมูลหรือบริการที่อ่อนไหว

การตั้งค่า CORS อย่างไรให้ปลอดภัย?

การตั้งค่า CORS อย่างไม่ระมัดระวังอาจเป็นการเปิดช่องโหว่ด้าน Security ได้ ดังนั้นเราต้องมั่นใจว่าคอนฟิกของเราปลอดภัยจริง ๆ นี่คือเคล็ดลับบางประการ:

  1. จำกัด Origin ที่อนุญาต: หลีกเลี่ยงการตั้งค่า Access-Control-Allow-Origin: * เพราะการอนุญาตทุกโดเมนเข้าถึงข้อมูลของเราเป็นเรื่องอันตราย เราควรระบุเฉพาะโดเมนที่เราเชื่อถือได้เท่านั้น เช่น Access-Control-Allow-Origin: https://trusted-site.com
  2. ตรวจสอบ Headers และ Methods: ควบคุมให้ถูกต้องว่า Headers และ Methods ใดที่อนุญาต เพราะบางทีการเปิดให้ใช้ Method เช่น PUT หรือ DELETE อาจทำให้เกิดความเสี่ยงถ้าเราไม่ได้ตรวจสอบหรือยืนยันสิทธิ์ให้ดี
  3. ไม่เชื่อถือ Credential Requests จากทุก Origin: ถ้า API ของคุณมีการใช้ Authentication หรือ Cookies ร่วมกับ CORS ต้องตั้ง Access-Control-Allow-Credentials ให้เฉพาะกับ Origin ที่เชื่อถือได้ หลีกเลี่ยงการตั้งเป็น true โดยไม่ระบุ Origin เพราะนั่นจะเป็นการเปิดประตูให้ผู้โจมตีจากทุกที่เข้าถึงข้อมูลส่วนตัวได้

ข้อควรระวังอื่น ๆ

แม้ว่า CORS จะช่วยแก้ปัญหาเรื่องการควบคุมการเข้าถึงจาก Cross-Origin ได้ดี แต่การพึ่งพา CORS อย่างเดียวอาจไม่เพียงพอ เราควร:

  • ใช้ Authentication ที่แข็งแรง: ควรมีการตรวจสอบสิทธิ์ที่แน่นหนาอยู่เสมอ
  • วางแผน Security ทุกจุด: ต้องคิดถึงทุกขั้นตอนของแอปพลิเคชัน ตั้งแต่ input validation ไปจนถึงการป้องกัน XSS และ SQL Injection

CORS ไม่ใช่ทั้งหมดของ Security แต่เป็นหนึ่งในส่วนสำคัญที่ช่วยให้การเข้าถึงทรัพยากรในระบบมีความปลอดภัยมากขึ้น ถ้าเราตั้งค่าอย่างเหมาะสม CORS ก็จะเป็นด่านแรกที่ช่วยป้องกันการโจมตีจากภายนอกได้อย่างมีประสิทธิภาพ

สรุป

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

Read more

การทำ Data Migration และ Seeder: คู่มือสำหรับ Developer

การทำ Data Migration และ Seeder: คู่มือสำหรับ Developer

ถ้าพูดถึงการพัฒนาแอปพลิเคชันที่เชื่อมต่อกับ Database หนึ่งในความยุ่งยากที่สุดคือการจัดการ Database structure ที่เปลี่ยนไปตามฟีเจอร์ใหม่ๆ ที่เพิ่มเข้ามา เช่น เพิ่มตาราง (Table) เปลี่ยนชนิดข้อมูล (Data type) หรือลบฟิลด์ (Field) ออกไป และแน่นอนว่

By maimem
เช็ค Internet จากเว็บ: ทำยังไงให้รู้ว่าออกเน็ตได้จริง?

เช็ค Internet จากเว็บ: ทำยังไงให้รู้ว่าออกเน็ตได้จริง?

เคยเจอไหมครับ เวลาใช้งานเว็บไซต์แล้วอยู่ดี ๆ ก็โหลดข้อมูลไม่ได้ หรือ API เงียบหายไม่มีการตอบกลับ? หลายครั้งเรามักสงสัยว่า "ตกลงปัญหาอยู่ที่ตัวเรา เซิร์ฟเวอร์ หรือ Internet กันแน่?" วันนี้ผมจะมาเล่าเรื่อง "การตรวจสอบสถานะการเชื่อมต่

By maimem
Rust Series #2 - รู้จัก Cargo: ผู้ช่วยส่วนตัวของโปรเจกต์ Rust!

Rust Series #2 - รู้จัก Cargo: ผู้ช่วยส่วนตัวของโปรเจกต์ Rust!

ถ้าคุณเริ่มต้นเขียน Rust แล้วรู้สึกว่า “เฮ้ย! Rust เจ๋งแหะ” ก็ขอแสดงความยินดีครับ คุณเพิ่งเจอเพื่อนแท้ในโลกโปรแกรมมิ่ง! แต่เดี๋ยวก่อน... ถ้าต้องเขียนโค้ดโปรเจกต์ใหญ่ ๆ บริหารไลบรารี ดูแลไฟล์ต่าง ๆ หรือทดสอบโค้ดทุกวั

By maimem
ซ่อน Credential ใน AWS CodeBuild ให้ปลอดภัยด้วย Parameter Store

ซ่อน Credential ใน AWS CodeBuild ให้ปลอดภัยด้วย Parameter Store

ทำไมต้องซ่อน Credential? ในโลกของ DevOps และ Cloud Computing การจัดการ Credential (ข้อมูลรับรอง เช่น API Keys, Passwords, หรือ Secrets ต่างๆ) เป็นเรื่องที่สำคัญอย่างยิ่ง เพราะ Credential เปรียบเสมือนกุญแจที่เปิดประตูไปสู่ทรัพยากรสำคัญในระบบ เช่น ฐานข้อมูล

By maimem