สวัสดีทุกท่านนะครับ กลับมาพบกับแอดวินคนเดิมอีกครั้งนะครับ
ในครั้งนี้ แอดวินจะมาอธิบายให้ฟังเกี่ยวกับ X-Frame-Options นะครับ
X-Frame-Options คือ ตัวที่จะใช้กำหนดว่าเว็บบราวเซอร์จะได้รับอนุญาตให้แสดงผลหน้าเว็บของเราผ่านทาง Frame จากเว็บไซต์อื่น ๆ ได้หรือไม่ โดย Frame ดังกล่าวจะประกอบไปด้วย frame tag, iframe tag, embed tag หรือ object tag ซึ่งหากไม่มีการตั้งค่า X-Frame-Options นี้จะช่วยให้ผู้ไม่ประสงค์ดีสามารถโจมตีด้วยวิธี Clickjacking ได้
แล้วการโจมตีแบบ Clickjacking คือยังไงกันนะ
Clickjacking คือ การโจมตีผ่าน iframe โดยที่ผู้ไม่ประสงค์ดีจะฝัง iframe tag ที่เว็บไซต์ของคุณ หรือฝังเว็บไซต์ของคุณในเว็บไซต์ของผู้ไม่ประสงต์ดี เพื่อขโมยข้อมูลสำคัญหรือหลอกให้ผู้ใช้งานกระทำการใด ๆ ที่ทำให้เกิดความเสียหายต่อตัวผู้ใช้งานเองหรือต่อระบบ
หลาย ๆ คนอาจจะนึกหรือจิตนาการไม่ออกว่า เอ… จะเป็นการโจมตีแบบไหนกันนะ เรามาดูกันครับ
- นายเค กำลังใช้งานเว็บไซต์ธนาคารแห่งหนึ่ง DF
- หลังจากใช้งานเว็บไซต์เสร็จ นายเคได้ท่องเว็บไซต์หมวดกลางคืนแล้วไปเจอเว็บที่แจก Macbook M1 ด้วยความที่ว่านายเคกำลังอยากได้โน๊ตบุ๊ครุ่นใหม่และเครื่อง ฯ เก่า ก็ใกล้จะพังแล้ว นายเคจึงได้ทำการกด Subscribe เพื่อจะเอา Macbook M1
- หลังจากที่นายเคได้กด Subscribe ไปแล้ว นายเคก็พบว่าไม่มีอะไรเกิดขึ้น นายเคก็เริ่มรู้สึกเอ๊ะใจแบบแปลก ๆ จึงได้เข้าไปที่เว็บไซต์ธนาคาร DF แล้วนายเคก็พบว่าเงินในบัญชีของเขาลดลงมาได้ยังไง ซึ่งก่อนที่เขาจะเลิกใช้งานเว็บไซต์ธนาคาร เงินในบัญชียังเหลืออยู่ 1000 เลยนะ
มาถึงจุดนี้ ลูกเพจคนไหนมีความสงสัยกันไหมครับ ว่าทำไมอยู่ดี ๆ เงินของนายเคถึงได้หายไป ทั้ง ๆ ที่นายเคไม่ได้ทำอะไรเลย ไม่ได้เข้าใช้งานเว็บไซต์ธนาคารด้วยซ้ำ
.
.
.
.
.
แอดวินเฉลยละ
มันคือการโจมตี Clickjacking ผ่านทางเว็บไซต์ที่แจก Macbook M1 นั่นหละครับ
โดยผู้ไม่ประสงค์ดีจะสร้าง Content เพื่อหลอกล่อผู้ใช้งานและแอบฝังเว็บไซต์ธนาคารลงไป จากนั้นถ้าผู้ใช้งานกดปุ่มอะไรสักอย่างที่หน้าเว็บ การกระทำดังกล่าวจะไม่มีผลกระทบที่ตัวเว็บไซต์ของผู้ไม่ประสงค์ดี แต่จะมีผลกับเว็บไซต์ที่ถูกฝังเอาไว้
หลายคนคงสงสัยกันสินะครับว่า เอ๊ะ ถ้าฝังเว็บไซต์แล้ว ทำไมถึงมองไม่เห็นกันละ
นั่นเป็นเพราะว่าผู้ไม่ประสงค์ดีได้ซ่อนเว็บไซต์ธนาคารดังกล่าวไว้นั่นเอง ด้วยวิธีการตั้งค่า opacity เป็น 0
เพื่อความเข้าใจที่มากขึ้น แอดวินจะลองไม่ซ่อนเว็บไซต์ธนาคาร
จากรูปจะเห็นได้ว่า เว็บไซต์ของธนาคารได้ถูกฝังลงที่เว็บไซต์ของผู้ไม่ประสงค์ดี และถ้าดูโดยละเอียด ปุ่ม Transfer กับ ปุ่ม Subscribe จะอยู่ตรงกันพอดี นั่นจึงเป็นเหตุที่ว่าทำไมนายเคกดปุ่ม Subscribe แล้วเงินของนายเคจึงได้หายไป ก็เพราะว่าแท้จริงแล้วนายเคได้กดปุ่มโอนเงินไปที่บัญชีของผู้ไม่ประสงค์ดี
วิธีการโจมตี Clickjacking จะไม่มีทางสำเร็จได้เลย ถ้านายเคไม่โลภมากและไม่เชื่อถือเว็บไซต์ที่ไม่น่าเชื่อถือ หรือนายเคควรมีความตระหนักรู้เกี่ยวกับภัยคุกคามต่าง ๆ ก็จะรู้เท่าทันกลโกงได้
อย่างไรก็ตาม วิธีการโจมตี Clickjacking สามารถป้องกันหรือบรรเทาได้ด้วย X-Frame-Options นั่นเอง
โดยเราสามารถตั้งค่า X-Frame-Options ได้ 3 วิธี คือ
- X-Frame-Options: deny
- X-Frame-Options: sameorigin
- X-Frame-Options: allow-from https://example.com/
ซึ่งวิธีการที่แอดวินแนะนำ คือตั้งค่าให้เป็น deny เพื่อให้เว็บไซต์ดังกล่าวไม่สามารถแสดงผลผ่านทาง Frame ใด ๆ ได้
หากเว็บไซต์ธนาคาร ฯ ได้ตั้งค่า แล้ว ผลลัพธ์ที่ได้จะเป็นดังนี้
เพียงเท่านี้นายเคผู้น่าสงสารก็จะไม่ถูกโจมตีด้วยวิธีการ Clickjacking ได้อีกต่อไป เพราะเว็บบราวเซอร์ไม่ได้รับอนุญาตให้แสดงผลหน้าเว็บของธนาคารผ่านทาง Frame ที่เว็บไซต์อื่น ๆ ได้
แอดวินขอตัวลาไปก่อน สวัสดีครับ
ข้อมูลเพิ่มเติมเผื่อใครอยากจะศึกษานะ
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options