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

ทำไมอุโมงค์จึงครอบคลุมทรัพยากรย่อยไม่ได้

เนื้อหาแบบผสมเริ่มต้นด้วยเอกสาร HTTPS ที่ขอทรัพยากรย่อยผ่าน HTTP ธรรมดา ทุก URL ถูกตัดสินตามสคีมาของตัวเอง การป้องกันของเอกสารแม่จึงไม่เคยขยายไปยังคำขอลูก การเข้ารหัสที่เพิ่มใต้เบราว์เซอร์เปลี่ยนสิ่งที่เดินทางบนสาย ไม่ใช่ http:// ที่มาร์กอัปขอ

เบราว์เซอร์ปัจจุบันแบ่งคำขอเหล่านี้ออกเป็นสองกลุ่มและจัดการต่างกัน สคริปต์ สไตล์ชีต iframe และการเรียกผ่าน fetch, XMLHttpRequest หรือ WebSocket ถูกปฏิเสธทันทีโดยไม่มีการพยายามอัปเกรดก่อน รูปภาพ เสียง และวิดีโอถูกเขียนใหม่เป็น https:// และขอใหม่ และการโหลดจะถูกยกเลิกเมื่อการดึงที่ปลอดภัยนั้นล้มเหลว URL ของทรัพยากรย่อยที่โฮสต์เป็นที่อยู่ IP เปล่าได้รับการยกเว้นจากการอัปเกรด รูปภาพ HTTP บนโฮสต์ IP จึงยังถูกบล็อกแทนที่จะถูกแก้ไขอย่างเงียบ ๆ การแบ่งนี้รวมถึงข้อยกเว้นนั้นในฝั่งที่อัปเกรดได้ มีเอกสารอยู่ในคู่มือเนื้อหาแบบผสมของ Mozilla Chrome ใช้การปฏิเสธคล้ายกันกับการดาวน์โหลดที่ไม่ปลอดภัยซึ่งเริ่มจากหน้าที่ปลอดภัย จึงเป็นเหตุให้ลิงก์ PDF อาจตายได้ในขณะที่หน้าโดยรอบดูสมบูรณ์

แถวสีเทาจึงเป็นหลักฐานว่าการควบคุมทำงาน ไม่ใช่หลักฐานว่าอุโมงค์ปล่อยข้อความธรรมดาออกมา มองแถวนั้นเป็นสิ่งที่พบซึ่งชี้ไปที่การอ้างอิงเดียว ไม่ใช่ทั้งหน้า

ตัดสินว่าการอ้างอิงที่ไม่ปลอดภัยเป็นของใคร

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

URL มาจากไหนใครแก้ไขได้ขั้นแรก
เขียนตายตัวในเทมเพลตหรือบางส่วนที่คุณปรับใช้คุณแทนที่ด้วยรูปแบบ https:// แล้วล้างแคช
ถูกแทรกโดยผู้จัดการแท็กหรือชุดของผู้จำหน่ายผู้จำหน่าย พร้อมตั๋วของคุณส่ง URL ที่แน่นอน ประเภทคำขอ และบรรทัดคอนโซล
ให้บริการเฉพาะพอร์ต 80 โดยไม่มีตัวรับฟัง TLSเจ้าของโฮสต์ขอ TLS วางสิ่งที่คุณควบคุมไว้ข้างหน้า หรือเลิกล้มมัน

เมื่อโฮสต์ตอบบน 443 อยู่แล้วและมีเพียงการอ้างอิงที่บอกว่า http การแก้ไขเป็นเรื่องภายใน: เปลี่ยนการอ้างอิง ล้างแคชของหน้า และยืนยันว่าแถวกลายเป็น https โฮสต์ที่ฟังเฉพาะพอร์ต 80 ไม่สามารถทำให้สอดคล้องได้ด้วยการแก้ไข ทรัพยากรจึงย้าย ถูกวางสิ่งที่คุณควบคุมไว้ข้างหน้า หรือหายไป URL ที่ถูกแทรกโดยผู้จัดการแท็กยังปรากฏอยู่แม้เทมเพลตของคุณเองสะอาด และกรณีนั้นเป็นของตั๋วที่แนบ URL ที่แน่นอนและบรรทัดคอนโซลไว้ การบอกพนักงานให้อนุญาตเนื้อหาที่ไม่ปลอดภัยไม่ใช่หนึ่งในตัวเลือกเหล่านี้ เพราะมันปิดการตรวจสอบสำหรับทุกไซต์ที่โปรไฟล์เบราว์เซอร์นั้นเยี่ยมชม

แก้ไขการอ้างอิงไม่ใช่การตั้งค่าเบราว์เซอร์

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

curl -sSI https://cdn.example.org/vendor.js | head -n 1
curl -sS -o /dev/null -w '%{http_code} %{url_effective}\n' -L https://cdn.example.org/vendor.js

การควบคุมเสริมสองอย่างน่ารู้ไว้ และไม่มีอย่างใดแทนที่การแก้ไข ส่วนหัว Content-Security-Policy ที่มีupgrade-insecure-requestsทำให้เบราว์เซอร์เขียน URL ของทรัพยากรย่อย http ใหม่ก่อนออกจากหน้า ซึ่งจับการอ้างอิงเก่าที่คุณยังหาไม่พบ คำขอที่เขียนใหม่ยังล้มเหลวเมื่อโฮสต์ปลายทางไม่ให้บริการ HTTPS ส่วนหัวจึงเปลี่ยนเพียง URL ที่เบราว์เซอร์ลอง HSTS ใช้กับแต่ละโฮสต์ หมายความว่านโยบายบนโดเมนของคุณเองไม่ทำอะไรให้ CDN ของบุคคลที่สามที่ไม่เคยส่งส่วนหัวนั้นเลย หลังแก้เทมเพลต ให้ล้างแคชของหน้าและค้นหาชื่อโฮสต์เก่าใน HTML ที่เรนเดอร์แล้ว เพราะ URL เดียวกันอาจมาทางบางส่วน สตริงการแปล หรือฟิลด์ฐานข้อมูลได้เช่นกัน

ติดตามการเปลี่ยนเส้นทางด้วย เพราะห่วงโซ่ที่เริ่มด้วย https:// อาจลงเอยที่ตำแหน่ง http:// และเบราว์เซอร์ตัดสินการกระโดดครั้งสุดท้าย รูปแบบของ-Lคำสั่งที่สองข้างต้นพิมพ์ URL ที่มีผลนั้นให้คุณ หากการกระโดดครั้งสุดท้ายเป็น http ธรรมดา การอ้างอิงยังผิดอยู่แม้ลิงก์ที่คุณแก้ไขจะดูเรียบร้อย

ยืนยันหน้าด้วยคอนโซลและแผงเครือข่าย

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

เมื่อทรัพยากรเป็นของคนอื่น ให้ส่งสี่อย่าง: URL ที่แน่นอน ประเภทคำขอ ข้อความคอนโซล และหน้าที่มันปรากฏ ซ่อนตัวระบุเซสชันในทุกสิ่งที่คุณวางในตั๋ว รายงานที่บอกเพียงว่ารูปภาพเสียไม่ได้ให้อะไรแก่เจ้าของให้ค้นหา

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

บทความที่เกี่ยวข้อง