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

CORS เป็นโปรโตคอลส่วนหัวที่เบราว์เซอร์บังคับใช้ ดังนั้น ไม่มีสิ่งใดบนเส้นทางเครือข่ายจะปิดมันได้

ต้นกำเนิดไม่ใช่ที่อยู่ IP

ต้นกำเนิดคือสคีมา โฮสต์ และพอร์ต ไม่ใช่ที่อยู่ที่แพ็กเก็ตออกไป และไม่ใช่ IP ที่เซิร์ฟเวอร์เห็น นั่นคือเหตุผลที่ VPN เปลี่ยนทุกที่อยู่ที่สังเกตได้และปล่อยต้นกำเนิดไว้เหมือนเดิม เบราว์เซอร์เปรียบเทียบ Access-Control-Allow-Origin ของคำตอบกับต้นกำเนิดของหน้า และที่อยู่ขาออกไม่เคยเข้าสู่การเปรียบเทียบนั้น

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

เบราว์เซอร์ส่งอะไรจริง ๆ

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

ไคลเอนต์บรรทัดคำสั่งมักไม่แสดงสิ่งเหล่านี้เลย อาจไม่ส่งส่วนหัว Origin มักข้ามการตรวจสอบล่วงหน้า และอาจพาเครื่องมือรับรองที่ต่างออกไป เนื้อความที่ส่งกลับให้ curl พิสูจน์ว่าเซิร์ฟเวอร์ตอบ curl

หาคำตอบที่เปลี่ยนไป

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

บันทึกส่วนหัวการตอบสนองจากทั้งสองเส้นทางแล้วเปรียบเทียบทีละบรรทัด หากความต่างเดียวคือ Access-Control-Allow-Origin ที่หายไปในหน้าข้อผิดพลาดหน้าเดียว คุณพบสาเหตุแล้ว

แก้บริการ ไม่ใช่การบังคับใช้

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

หลีกเลี่ยงส่วนขยายเบราว์เซอร์ที่ปิด CORS เพราะมันเปลี่ยนขอบเขตความปลอดภัยพร้อมกับซ่อนความต่างของการตอบสนองที่ต้องอธิบาย และทิ้งความล้มเหลวเดิมไว้ให้ผู้ใช้คนอื่นทุกคน

บันทึกทั้งสองคำตอบ ต้นกำเนิดที่ใช้ และเส้นทางที่ไป บันทึกนั้นเปลี่ยนข่าวลือเรื่อง VPN ให้เป็นบั๊กของบริการ

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