โดยปกติ Web Application ที่ต้องมีระบบ Login ย่อมต้องมีการใช้งาน Cookies ในการเก็บค่าต่างๆ เพื่อให้รู้ว่ามีการ Login ไปแล้ว เช่น Token หรือ Session เลยทำให้ Cookies นั้นสามารถเป็นเป้าหมายในการโจมตีเพื่อขโมยข้อมูล ไว้ไป เช่น อาจจะเอาไปปลอมแปลงเป็น User เพื่อ Login เข้าใช้งานอีกตัวตนนึง เป็นต้น โดยวิธีการโจมตีช่องโหว่ที่นิยมคือ

  • Cross-Site Scripting (XSS) คือ การฝัง Script ไว้ในหน้า Page เพื่ออ่านข้อมูล Cookies อาจจะเกิดการเขียนโปรแกรมที่ไม่รัดกุมปล่อยให้ ฟอร์มกรอกข้อมูลรับ Javascript ไปโดยที่ไม่ได้กรอง แล้วระบบเอาไปเก็บใน Database เพื่อ Render ในหน้า Page เมื่อ User ทั่วไปเปิดอ่าน Script ที่ฝังก็จะทำงานอ่านข้อมูลใน Cookies เป็นต้น
  • Cross-Site Request Forgery (CSRF) จะเกิดเมื่อ Login ค้างไว้ นั่นคือใน Cookies จะมีข้อมูลระบุตัวตนพร้อมเข้าใช้งานได้แล้ว การโจมตีคือ User เช่น อาจจะได้รับอีเมล์ Phishing แล้วเผลอไปกดลิงค์นั้น เข้าไปยัง Server ของผู้โจมตีที่ส่ง Resuest พร้อมกับ Cookies ที่มีอยู่เดิมจากการ Login ค้างไว้ เพื่อทำธุรกรรมบางอย่างโดยที่ตัวเองก็ไม่รู้ตัว เป็นต้น

* จากช่องโหว่ด้านบนอธิบายสั้นๆ อาจจะไม่ละเอียด ลองนำคำไปค้นหาใน Google เพื่อทำความเข้าใจอีกครั้งครับ

ในส่วนวิธีการป้องกันก็มีได้หลายแบบ ไม่ว่าจะเป็นการกรองข้อมูล Request ที่ได้รับจากภายนอกให้รัดกุม หรือตั้งค่า Server ว่า Request ที่ได้รับมานั้นเป็น User ไม่ใช่ผู้โจมตี แต่บทความนี้จะกล่าวเพียงแค่ส่วน Cookies เท่านั้น โดยเราควรจะกำหนด HTTP Cookie scopes หรือ Cookie flags ดังนี้

1. เปิดใช้ HttpOnly

เพื่อไม่ให้ Client สามารถเห็นหรืออ่านข้อมูล Cookies ช่วยลดความเสี่ยงของการโจมตีแบบ Cross-Site Scripting (XSS)

2. เปิดใช้ Secure

เพื่อบังคับให้รับส่ง Cookie บน HTTPS ซึ่งมีการเข้ารหัสข้อมูลเท่านั้น ทำให้จะไม่มีการดักอ่าน Cookies ระหว่างทางของ Client และ Server ได้

3. เปิดใช้ SameSite

เพื่อลดความเสี่ยงของการโจมตีแบบ Cross-Site Request Forgery (CSRF) ด้วยการป้องกันต้นทางของ Cookie ที่จะส่งมายัง Server โดยเลือกกำหนดค่าได้ 2 แบบ ดังนี้

  • Strict  อนุญาตให้ส่ง Cookies จากเว็บไซต์ของเราเท่านั้น
  • Lax  อนุญาตให้เว็บไซต์อื่นส่ง Cookies มายัง Server เราได้ โดยผ่าน HTTP GET เท่านั้น ส่วน POST PUT DELETE จะใช้ไม่ได้

เมื่อตั้งค่าทุกอย่างเสร็จแล้ว สามารถตรวจสอบความถูกต้องใน Chrome โดย Inspect และเลือกแถบ Application จากนั้นดูที่เมนู Cookies ดังรูป

ก็หวังว่าบทความนี้คงจะเกิดประโยชน์ไม่มากก็น้อยครับ