VPN เชื่อมต่อแล้วแต่เนื้อหาแบบผสมยังถูกบล็อก: ควรแก้อะไร
จัดเรียง URL ที่ถูกบล็อกตามผู้ที่สร้างมันขึ้นมา แก้ไขการอ้างอิงหรือส่งต่อให้เจ้าของโฮสต์ จากนั้นยืนยันการแก้ไขจากคอนโซลของเบราว์เซอร์
หน้าครึ่งหนึ่งแสดงผล สไตล์ชีตหนึ่งรายการเป็นสีเทาในแผงเครือข่าย และไคลเอนต์ 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 ที่แน่นอน ประเภทคำขอ ข้อความคอนโซล และหน้าที่มันปรากฏ ซ่อนตัวระบุเซสชันในทุกสิ่งที่คุณวางในตั๋ว รายงานที่บอกเพียงว่ารูปภาพเสียไม่ได้ให้อะไรแก่เจ้าของให้ค้นหา
อุโมงค์ยังทำงานของตัวเองต่อไปในขณะที่การแก้ไขอยู่ในการอ้างอิงที่สร้างคำขอ หลังการปรับใช้ ให้ค้นหาชื่อโฮสต์อีกครั้งในเทมเพลตและชุดของผู้จำหน่าย และปิดเคสเมื่อไม่มีรายการเนื้อหาแบบผสมที่ถูกบล็อกเหลืออยู่ในคอนโซลเท่านั้น