การเข้าถึงเครือข่ายส่วนตัว: การปกป้องอีกระดับสำหรับ Web Worker และการดึงข้อมูลการนำทาง

Jonathan Hao
Jonathan Hao

การเข้าถึงเครือข่ายส่วนตัวคืออะไร

การเข้าถึงเครือข่ายส่วนตัว (PNA ซึ่งก่อนหน้านี้เรียกว่า CORS-RFC1918 หรือเรียกสั้นๆ ว่าการเข้าถึงเครือข่ายภายใน) เป็นคุณลักษณะความปลอดภัยที่จำกัดความสามารถของเว็บไซต์ในการส่งคำขอไปยังเซิร์ฟเวอร์ในเครือข่ายส่วนตัว ซึ่งจะช่วยปกป้องผู้ใช้และเครือข่ายภายในจากการโจมตีที่อาจเกิดขึ้น เช่น Cross-Site Request Forgery (CSRF) Chrome ได้ทยอยนำ PNA ไปใช้งาน และจะเพิ่มการปกป้องในรุ่นที่กำลังจะเปิดตัว

การปกป้องที่สำคัญของ PNA (พร้อมสถานะปัจจุบันของ)

  • บริบทที่ปลอดภัย: อนุญาตให้เฉพาะบริบทที่ปลอดภัยเท่านั้นที่ได้รับอนุญาตให้ส่งคำขอทรัพยากรย่อยของเครือข่ายส่วนตัว (บังคับใช้ตั้งแต่ Chrome 94) โปรดดูรายละเอียดที่โพสต์อัปเดตการเข้าถึงเครือข่ายส่วนตัว
  • คำขอการตรวจสอบล่วงหน้า: Chrome จะส่งคำขอการตรวจสอบล่วงหน้าก่อนคำขอทรัพยากรย่อยของเครือข่ายส่วนตัวเพื่อตรวจสอบสิทธิ์ของเซิร์ฟเวอร์ (คำเตือนในเครื่องมือสำหรับนักพัฒนาเว็บเกี่ยวกับความล้มเหลวตั้งแต่ Chrome 104 จะบังคับใช้ใน Chrome 104) ซึ่งได้อธิบายไว้ในการเข้าถึงเครือข่ายส่วนตัว: แนะนำการตรวจสอบล่วงหน้า ตั้งแต่ Chrome 123 เป็นต้นไป Chrome จะไม่รวมส่วนหัว CORS บางรายการ เช่น Accept หากมีการสร้างและส่งการตรวจสอบล่วงหน้าเนื่องจาก PNA เท่านั้น
  • การยกเว้นจากต้นทางเดียวกัน: คำขอที่มาจากต้นทางเดียวกันซึ่งมีโอกาสน่าเชื่อถือจะได้รับการยกเว้นจากข้อจำกัด PNA

การปกป้องที่ดียิ่งขึ้น: ผู้ปฏิบัติงานเกี่ยวกับเว็บ

การปกป้อง PNA จะขยายครอบคลุมWeb Worker (ผู้ปฏิบัติงานโดยเฉพาะ ผู้ปฏิบัติงานที่ใช้ร่วมกัน และ Service Worker) ซึ่งรวมถึงกรณีต่อไปนี้

  • การดึงข้อมูลสคริปต์ผู้ปฏิบัติงาน: ต้องมีบริบทที่ปลอดภัยและการตรวจสอบล่วงหน้าสำหรับที่อยู่ IP สาธารณะน้อยกว่า คำเตือนตั้งแต่ Chrome 110 ที่จะบังคับใช้ใน Chrome 130
  • การดึงข้อมูลที่เริ่มต้นโดยสคริปต์สำหรับผู้ปฏิบัติงาน: การดึงข้อมูลทั้งหมดจากภายในสคริปต์ของผู้ปฏิบัติงานจะเป็นไปตามกฎ PNA เดียวกัน

ตั้งแต่ Chrome 124 เป็นต้นไป คุณจะทดสอบการบังคับใช้ได้โดยทำตามขั้นตอนต่อไปนี้

  • ปิดใช้ chrome://flags/#private-network-access-ignore-worker-errors
  • เปิดใช้ chrome://flags/#private-network-access-respect-preflight-results

การปกป้องเพิ่มเติม: การดึงข้อมูลการนำทาง

นอกจากนี้ PNA ยังใช้กับ Navigation Fetch (iframe, ป๊อปอัป) เนื่องจากอาจมีการใช้งานในการโจมตี CSRF Chrome 123 เริ่มแสดงคำเตือนเกี่ยวกับการทำงานล้มเหลว โดยมีการวางแผนการบังคับใช้กับ Chrome 130

ตั้งแต่ Chrome 124 เป็นต้นไป คุณจะทดสอบการบังคับใช้ได้โดยทำดังนี้

  • ปิดใช้ chrome://flags/#private-network-access-ignore-navigation-errors
  • เปิดใช้ chrome://flags/#private-network-access-respect-preflight-results

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

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

สิ่งที่ต้องทำหากเว็บไซต์ของคุณได้รับผลกระทบ

โพสต์การเข้าถึงเครือข่ายส่วนตัว: การแนะนำการตรวจสอบล่วงหน้าจะมีคำแนะนำรวมอยู่ด้วย ที่สำคัญสำหรับคำขอการนำทางมีดังนี้

  • Access-Control-Allow-Origin ไม่สามารถเป็นไวลด์การ์ด ("*")
  • ต้องตั้งค่า Access-Control-Allow-Credentials เป็น "true"

ขั้นตอนถัดไปคือ

  • WebSockets: โดยปกติจะเริ่มใน Chrome 126 PNA จะครอบคลุมแฮนด์เชค WebSocket (คำเตือนก่อน)
  • การบังคับใช้อย่างเต็มรูปแบบ: จะมีการบังคับใช้ข้อจำกัด PNA ทั้งหมด (การบล็อกคำขอที่ไม่เป็นไปตามข้อกำหนด) ชั่วคราวใน Chrome 130 ผู้ใช้จะมีการตั้งค่าเว็บไซต์เพื่อลบล้าง PNA สำหรับเว็บไซต์ที่เชื่อถือได้

ความคิดเห็นเกี่ยวกับกรณีการใช้งานเครือข่ายส่วนตัว

หากคุณโฮสต์เว็บไซต์บนเครือข่ายส่วนตัวที่ต้องการคำขอจากเครือข่ายสาธารณะ ทีม Chrome ต้องการความคิดเห็นจากคุณ รายงานปัญหาที่เครื่องมือติดตามปัญหา Chromium (คอมโพเนนต์: Blink>SecurityFeature>CORS>PrivateNetworkAccess)

รูปภาพโดย Jakub noopenererdzicki ใน Unsplash