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

Jonathan Hao
Jonathan Hao

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

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

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

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

การปกป้องเพิ่มเติม: เวิร์กเกอร์บนเว็บ

การป้องกัน PNA จะขยายไปยัง Web Worker (Worker โดยเฉพาะ, 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 ยังใช้กับการดึงข้อมูลการนําทาง (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: PNA จะครอบคลุมแฮนด์เชค WebSocket (คำเตือนก่อน) โดยจะเริ่มตั้งแต่ Chrome 126 เป็นต้นไป
  • การบังคับใช้อย่างเต็มรูปแบบ: ระบบจะบังคับใช้ข้อจำกัด PNA ทั้งหมด (บล็อกคำขอที่ไม่เป็นไปตามข้อกำหนด) ใน Chrome 130 โดยประมาณ ผู้ใช้จะมีการตั้งค่าเว็บไซต์เพื่อลบล้าง PNA สำหรับเว็บไซต์ที่เชื่อถือ

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

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

รูปภาพโดย Jakub Żerdzicki จาก Unsplash