นโยบายที่มีต้นทางเดียวกัน

Mariko Kosaka

นโยบายต้นทางเดียวกันเป็นฟีเจอร์ด้านความปลอดภัยของเบราว์เซอร์ที่จำกัดวิธีที่เอกสารและสคริปต์ในต้นทางหนึ่งโต้ตอบกับทรัพยากรในต้นทางอื่น

เบราว์เซอร์สามารถโหลดและแสดงทรัพยากรจากหลายเว็บไซต์พร้อมกัน คุณอาจเปิดแท็บหลายแท็บพร้อมกัน หรือเว็บไซต์อาจฝัง iframe หลายรายการจากเว็บไซต์ต่างๆ หากไม่มีการจํากัดการโต้ตอบระหว่างทรัพยากรเหล่านี้ และสคริปต์ถูกผู้โจมตีแทรกแซง สคริปต์ดังกล่าวอาจเปิดเผยข้อมูลทั้งหมดในเบราว์เซอร์ของผู้ใช้

นโยบายต้นทางเดียวกันจะป้องกันไม่ให้เกิดเหตุการณ์นี้ขึ้นด้วยการบล็อกการเข้าถึงระดับอ่านสำหรับทรัพยากรที่โหลดจากต้นทางอื่น คุณอาจสงสัยว่า "แต่เดี๋ยวก่อน ฉันโหลดรูปภาพและสคริปต์จากแหล่งที่มาอื่นๆ ตลอด" เบราว์เซอร์อนุญาตให้ฝังแท็กได้เพียงไม่กี่แท็กจากแหล่งที่มาอื่น นโยบายนี้ส่วนใหญ่เป็นรายการประวัติและอาจทำให้เว็บไซต์ของคุณมีช่องโหว่ เช่น การคลิกจากระยะไกลโดยใช้ iframe คุณสามารถจํากัดการอ่านแท็กเหล่านี้ข้ามแหล่งที่มาได้โดยใช้นโยบายรักษาความปลอดภัยเนื้อหา

อะไรบ้างที่ถือว่าเป็นต้นทางเดียวกัน

ต้นทางจะกำหนดโดยรูปแบบ (หรือที่เรียกว่าโปรโตคอล เช่น HTTP หรือ HTTPS) พอร์ต (หากระบุ) และเฮสต์ เมื่อทั้ง 3 รายการเหมือนกันสำหรับ URL 2 รายการ ระบบจะถือว่า URL เหล่านั้นมีต้นทางเดียวกัน ตัวอย่างเช่น http://www.example.com/foo มีต้นทางเดียวกับ http://www.example.com/bar แต่ไม่ใช่ https://www.example.com/bar เนื่องจากรูปแบบต่างกัน

เนื้อหาใดบ้างที่ได้รับอนุญาตและไม่ได้รับอนุญาต

โดยทั่วไปแล้ว ระบบจะอนุญาตให้ฝังทรัพยากรข้ามโดเมน แต่บล็อกการอ่านทรัพยากรข้ามโดเมน

iframe โดยปกติแล้วระบบจะอนุญาตให้ฝังข้ามแหล่งที่มา (ขึ้นอยู่กับคำสั่ง X-Frame-Options) แต่จะไม่อนุญาตให้อ่านข้ามแหล่งที่มา (เช่น การใช้ JavaScript เพื่อเข้าถึงเอกสารใน iframe)
CSS คุณฝัง CSS ข้ามแหล่งที่มาได้โดยใช้องค์ประกอบ <link> หรือ @import ในไฟล์ CSS คุณอาจต้องใช้ส่วนหัว Content-Type ที่ถูกต้อง
แบบฟอร์ม คุณสามารถใช้ URL ข้ามแหล่งที่มาเป็นค่าแอตทริบิวต์ action ขององค์ประกอบแบบฟอร์มได้ เว็บแอปพลิเคชันสามารถเขียนข้อมูลแบบฟอร์มไปยังปลายทางข้ามแหล่งที่มาได้
รูปภาพ อนุญาตให้ฝังรูปภาพข้ามแหล่งที่มา อย่างไรก็ตาม ระบบจะบล็อกการอ่านข้อมูลรูปภาพข้ามต้นทาง (เช่น การดึงข้อมูลไบนารีจากรูปภาพข้ามต้นทางโดยใช้ JavaScript)
สื่อประสม คุณสามารถฝังวิดีโอและเสียงข้ามแหล่งที่มาได้โดยใช้องค์ประกอบ <video> และ <audio>
แบบตัวเขียน คุณสามารถฝังสคริปต์ข้ามแหล่งที่มาได้ แต่การเข้าถึง API บางรายการ (เช่น คำขอดึงข้อมูลข้ามแหล่งที่มา) อาจถูกบล็อก

TODO: DevSite - Think and Check assessment

วิธีป้องกัน Clickjacking

การแย่งชิงการคลิก
รูปภาพ: กลไกการคลิกจากระยะไกลที่แสดงเป็นเลเยอร์แยกกัน 3 เลเยอร์ (เว็บไซต์พื้นฐาน เว็บไซต์ใน iframe ปุ่มโปร่งใส)

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

หากต้องการบล็อกไม่ให้เว็บไซต์อื่นๆ ฝังเว็บไซต์ของคุณใน iframe ให้เพิ่มนโยบายความปลอดภัยของเนื้อหาที่มีคำสั่ง frame-ancestors ลงในส่วนหัว HTTP

หรือจะเพิ่ม X-Frame-Options ลงในส่วนหัวของ HTTP ก็ได้ ดูรายการตัวเลือกได้ที่ MDN

สรุป

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