Mixed Content บนหน้า HTTPS
Mixed content คืออะไร
เมื่อเอกสารถูกโหลดผ่าน HTTPS แต่ไปดึงสคริปต์, สไตล์, iframe หรือสื่อผ่าน HTTP เรียกว่า mixed content ช่อง HTTP นั้นไม่ได้อยู่ภายใต้การปกป้องเดียวกับหน้าหลัก ผู้โจมตีบนเครือข่ายอาจเปลี่ยนสคริปต์ได้
คำจำกัดความและพฤติกรรมเบราว์เซอร์อยู่ที่ MDN: Mixed content และ WHATWG Mixed Content
แอ็กทีฟกับพาสซีฟ
- แอ็กทีฟ: สคริปต์, stylesheet, iframe,
fetch, XHR, WebSocket — เบราว์เซอร์สมัยใหม่บล็อกเป็นค่าเริ่มต้น - พาสซีฟ: รูป, เสียง, วิดีโอ — บางบริบทเคยอนุญาตแต่ถูกจำกัดมากขึ้น และยังทำลายแม่กุญแจความปลอดภัยของหน้า
Chrome และเบราว์เซอร์อื่นยังมี upgrade ที่พยายามเปลี่ยนคำขอพาสซีฟเป็น HTTPS อัตโนมัติ แต่เว็บไม่ควรถือว่ามีชั้นนี้อยู่เสมอ
วิธีแก้ในเว็บของตนเอง
- ใช้ URL แบบ scheme-relative (
//cdn.example.com/app.js) หรือ HTTPS เต็ม - ตรวจ Content-Security-Policy
upgrade-insecure-requestsเป็นชั้นเสริม ไม่ใช่ทางลัดระยะยาว - ตรวจคอนโซลเบราว์เซอร์และรายงาน CSP เมื่อมีคำขอที่ถูกบล็อก
HSTS ช่วยให้คำขอถัดไปไปโดเมนตนเองเป็น HTTPS แต่ไม่แก้ทรัพยากรบุคคลที่สามที่ไม่มี HTTPS
สรุป
หน้า HTTPS ที่ยังดึงสคริปต์ผ่าน HTTP ไม่ถือว่าปลอดภัย แก้ที่แหล่งที่มาของ URL ให้เป็น HTTPS ทั้งชุด