การเข้าถึงเครือข่ายส่วนตัว: การปกป้องอีกระดับสำหรับ 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 จะข้ามส่วนหัว CORS บางรายการ เช่น Accept หากการตรวจสอบล่วงหน้าสร้างขึ้นและส่งเนื่องจาก PNA เท่านั้น
  • การยกเว้นต้นทางเดียวกัน: เนื่องจาก Chrome 115 คำขอที่มีต้นทางเดียวกันจากต้นทางที่อาจน่าเชื่อถือจะได้รับการยกเว้นจากข้อจำกัดของ PNA

การปกป้องเพิ่มเติม: ผู้ปฏิบัติงานทำงานบนเว็บ

การปกป้องด้วย PNA จะครอบคลุมผู้ปฏิบัติงานบนเว็บ (ผู้ปฏิบัติงานเฉพาะทาง ผู้ปฏิบัติงานที่แชร์ และผู้ปฏิบัติงานด้านบริการ) ซึ่งรวมถึงเนื้อหาต่อไปนี้

  • การดึงข้อมูลสคริปต์ผู้ปฏิบัติงาน: ต้องใช้บริบทที่ปลอดภัยและการตรวจสอบล่วงหน้าสำหรับที่อยู่ 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"

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

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

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

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

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