Isolated Web App (IWA) มีโมเดลความปลอดภัยที่ช่วยให้เว็บแอปพลิเคชันเข้าถึงความสามารถที่มีประสิทธิภาพ เช่น Direct Sockets และ Controlled Frame ซึ่งโดยปกติจะถูกจำกัดในเว็บ "ไดรฟ์บาย" มาตรฐาน เนื่องจาก IWA ทำงานในสภาพแวดล้อมที่มีความน่าเชื่อถือสูง จึงต้องปฏิบัติตามนโยบายด้านความปลอดภัยและความเป็นส่วนตัวที่เข้มงวด หลักเกณฑ์เหล่านี้ออกแบบมาเพื่อให้มั่นใจว่าเมื่อแพลตฟอร์มเว็บมีประสิทธิภาพมากขึ้น ผู้ใช้จะยังคงปลอดภัยและสภาพแวดล้อมของเบราว์เซอร์จะยังคงมีความสมบูรณ์
โมเดลความน่าเชื่อถือของ IWA
หัวใจหลักของแพลตฟอร์ม IWA คือนโยบายทางเทคนิคที่เข้มงวดซึ่งบังคับให้นักพัฒนาแอปต้องรักษาระดับความปลอดภัยสูง ในขณะที่เว็บแอปมาตรฐานอาศัยโมเดลสิทธิ์ที่ยืดหยุ่น IWA จะได้รับการลงนามแบบเข้ารหัสและส่งโดยใช้ Web Bundles ซึ่งช่วยให้ตรวจสอบแหล่งที่มาและความสมบูรณ์ได้
IWA จะได้รับสิทธิ์เข้าถึง API ที่มีสิทธิ์พิเศษเพื่อแลกกับการยืนยันตัวตนนี้ นักพัฒนาแอปต้องใช้แนวทางที่เน้นความปลอดภัยเป็นอันดับแรกโดยปฏิบัติตามนโยบายที่เข้มงวดมากขึ้น ซึ่งรวมถึงนโยบายรักษาความปลอดภัยเนื้อหา (CSP) และประเภทที่เชื่อถือได้ที่มีประสิทธิภาพ เพื่อให้มั่นใจว่าผู้ใช้จะปลอดภัยแม้จะใช้ความสามารถที่มีประสิทธิภาพ ซึ่งหมายความว่า
- ความโปร่งใส: ผู้ใช้ไม่ควรประหลาดใจกับการที่แอปพลิเคชันใช้ API ที่มีสิทธิ์
- สิทธิ์ขั้นต่ำ: แอปควรขอและใช้เฉพาะความสามารถที่เฉพาะเจาะจงซึ่งจำเป็นสำหรับวัตถุประสงค์ที่ระบุไว้เท่านั้น
- ความสมบูรณ์แบบคงที่: ตรรกะที่เรียกใช้งานได้ทั้งหมดต้องอยู่ในแพ็กเกจแอปด้วยตัวเองเพื่อให้ตรวจสอบความปลอดภัยได้และป้องกันการโหลดแอปจากแหล่งที่ไม่รู้จักของโค้ดที่เป็นอันตราย
แม้ว่า IWA จะมีการป้องกันในตัวที่แข็งแกร่ง เช่น นโยบายรักษาความปลอดภัยเนื้อหา (CSP) ที่เข้มงวดซึ่งป้องกันการเรียกใช้สคริปต์ภายนอก แต่ข้อจำกัดทางเทคนิคเพียงอย่างเดียวก็ไม่สามารถลดความเสี่ยงได้ทั้งหมด แม้จะอยู่ในสภาพแวดล้อมที่มีความน่าเชื่อถือสูง แต่รูปแบบการติดตั้งใช้งานหรือตัวเลือกของนักพัฒนาแอปบางอย่างอาจทำให้ความปลอดภัยหรือความเป็นส่วนตัวของผู้ใช้ตกอยู่ในความเสี่ยงโดยไม่ตั้งใจ คู่มือนี้จะอธิบายสถานการณ์ที่ถูกจำกัดและนโยบายที่ควบคุมการใช้ API ที่มีสิทธิ์
เหตุผลที่หลักเกณฑ์เหล่านี้มีความสำคัญ
การปฏิบัติตามนโยบายเหล่านี้ไม่ได้มีไว้เพื่อการปฏิบัติตามข้อกำหนดเท่านั้น แต่ยังเป็นการสร้างระบบนิเวศที่ยั่งยืนสำหรับเว็บแอปพลิเคชันขั้นสูงด้วย การปฏิบัติตามหลักเกณฑ์เหล่านี้จะช่วยให้แอปพลิเคชันของคุณมีคุณสมบัติดังนี้
- หลีกเลี่ยงการถดถอยด้านความปลอดภัย: ป้องกันช่องโหว่ เช่น Cross-Site Scripting (XSS) และการเรียกใช้โค้ดจากระยะไกลด้วยการเก็บตรรกะไว้ในตัวเอง
- ปกป้องความเป็นส่วนตัวของผู้ใช้: รับรองว่ามีการจัดการข้อมูลที่ละเอียดอ่อนและการเข้าถึงฮาร์ดแวร์โดยมีเจตนาและความโปร่งใสของผู้ใช้ที่ชัดเจนเท่านั้น
- รับประกันอายุการใช้งานของแพลตฟอร์ม: ช่วยรักษามาตรฐานความปลอดภัยระดับสูงที่จำเป็นสำหรับแพลตฟอร์ม IWA เพื่อขยายชุดความสามารถต่อไป
หลักการสำคัญ
ความโปร่งใสและความตั้งใจของผู้ใช้
กฎพื้นฐานที่สุดคืออย่าทำให้ผู้ใช้ประหลาดใจ ลักษณะการทำงานของแอปพลิเคชันต้องสอดคล้องกับวัตถุประสงค์ที่ระบุไว้และความคาดหวังของผู้ใช้
- อยู่ในขอบเขต: อย่าใช้ฟังก์ชันการทำงานที่นอกเหนือจากวัตถุประสงค์ที่ชัดเจนของแอปพลิเคชัน
- ร่องรอย API ขั้นต่ำ: ขอและใช้ชุด API ของ IWA ที่เฉพาะเจาะจงที่จำเป็นต่อการบรรลุฟังก์ชันหลักของแอปเท่านั้น
ไม่มีการโหลดโค้ดแบบไดนามิกจากภายนอก
โมเดลความปลอดภัยของ IWA ขึ้นอยู่กับความสามารถของผู้ดูแลระบบหรือผู้ให้บริการเบราว์เซอร์ในการยืนยันตรรกะที่เรียกใช้งานได้ทั้งหมด ดังนั้น แพ็กเกจ IWA ของคุณจึงต้องมีทุกอย่างครบถ้วนในตัว แพลตฟอร์มบังคับใช้ข้อกำหนดนี้ผ่านนโยบายรักษาความปลอดภัยเนื้อหา (CSP) ที่เข้มงวดซึ่งบล็อกการดำเนินการตามสตริง เช่น eval() และ new Function()
script-src 'self' 'wasm-unsafe-eval';
require-trusted-types-for 'script';
แม้ว่า CSP จะอนุญาตให้ 'wasm-unsafe-eval' รองรับ WebAssembly แต่คุณต้องไม่หลีกเลี่ยงเจตนารมณ์ของขอบเขตความปลอดภัยนี้
การปฏิบัติที่ไม่อนุญาตโดยเด็ดขาด
- การจัดส่งอินเทอร์พรีเตอร์สำหรับรีโมตโค้ด: คุณต้องไม่รวมอินเทอร์พรีเตอร์ของโค้ด (เช่น Python หรือ Lua ที่คอมไพล์เป็น WASM) เพื่อดาวน์โหลดและเรียกใช้สคริปต์ภายนอกโดยใช้สิทธิ์เข้าถึงเครือข่ายที่มีสิทธิ์ เช่น Direct Sockets
- ตรรกะที่โหลดจากระยะไกล: อย่าใช้ Service Worker เพื่อฝังโค้ดที่โหลดจากระยะไกลลงในต้นทางของ IWA
- โค้ดเทียบกับข้อมูล: แม้ว่าจะได้รับอนุญาตให้ดาวน์โหลดข้อมูล (เช่น JSON) แต่การดาวน์โหลดโค้ดใดๆ ที่มีจุดประสงค์เพื่อตีความหรือเรียกใช้ถือเป็นการละเมิดนโยบายโดยตรง
หลักการให้สิทธิ์ขั้นต่ำที่สุด
ใช้ API ที่มีประสิทธิภาพน้อยที่สุดที่สามารถทำงานให้สำเร็จได้เสมอ ไม่ควรใช้ API เฉพาะ IWA ที่มีสิทธิ์เป็นทางลัดเพื่อหลีกเลี่ยงข้อจำกัดด้านความปลอดภัยหรือข้อความแจ้งของผู้ใช้ของ Web API มาตรฐาน ตารางต่อไปนี้แสดงกรณีการใช้งานทั่วไปเพื่อช่วยคุณตัดสินใจว่าจะใช้ Web API แบบเดิมหรือความสามารถเฉพาะของ IWA เมื่อใด
| งาน | ใช้ Web API มาตรฐาน (แนะนำ) | หลีกเลี่ยงการใช้ IWA API ที่มีสิทธิ์ (จำกัด) |
|---|---|---|
| การเข้าถึงฮาร์ดไดรฟ์ภายนอก | ใช้ File System Access API สำหรับ I/O ของไฟล์มาตรฐาน | อย่าใช้ WebUSB แบบไม่จำกัดเพื่อเข้าถึงพื้นที่เก็บข้อมูล |
| การโต้ตอบกับสมาร์ทการ์ด | ใช้ Smart Card API | อย่าใช้ WebUSB ที่ไม่จำกัด สำหรับสมาร์ทการ์ด |
| การสื่อสารกับอุปกรณ์ซีเรียล | ใช้ WebSerial API หากเพียงพอสำหรับอุปกรณ์ | หลีกเลี่ยง WebUSB ที่ไม่จำกัดหาก WebSerial ทำงานได้ |
| การฝังเนื้อหาที่เชื่อถือได้ | ใช้ <iframe> มาตรฐาน |
อย่าใช้ <controlledframe> สำหรับการฝังอย่างง่าย เว้นแต่จะต้องมีการแยก |
หลักเกณฑ์เฉพาะ API
API ของ IWA มีความสามารถอันทรงพลังซึ่งโดยปกติแล้วจะถูกจำกัดในเบราว์เซอร์ คำแนะนำทั่วไปคือไม่ควรใช้ฟีเจอร์ที่มีสิทธิ์เหล่านี้ในลักษณะที่ทำให้ผู้ใช้ประหลาดใจหรือทำให้ความไว้วางใจและข้อมูลของผู้ใช้ตกอยู่ในความเสี่ยง
Direct Sockets API
Direct Sockets API ให้สิทธิ์เข้าถึง TCP และ UDP แบบดิบ ซึ่งรวมถึงการเข้าถึงแบบหลายผู้รับและการเข้าถึงเครือข่าย LAN
อนุญาต
- รองรับโปรโตคอลที่กำหนดเอง: เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลที่ใช้โปรโตคอลที่กำหนดเองซึ่งปัจจุบันไม่มี Web API ระดับสูงกว่า
- การบำรุงรักษาบริการแบ็กเอนด์: การเชื่อมต่อกับเซิร์ฟเวอร์ที่กำหนดไว้ล่วงหน้าและฮาร์ดโค้ดซึ่งใช้เฉพาะสำหรับบริการแบ็กเอนด์ของแอปพลิเคชัน
- การค้นหาฮาร์ดแวร์ที่จำเป็น: การเข้าถึงเครือข่ายภายในหรือการใช้การส่งแบบหลายผู้รับเพื่อค้นหาฮาร์ดแวร์ที่เกี่ยวข้องและเฉพาะเจาะจงซึ่งจำเป็นต่อฟังก์ชันของแอป (เช่น แอปตัดต่อวิดีโอที่ค้นหาที่เก็บข้อมูลที่เชื่อมต่อเครือข่าย)
ไม่อนุญาต
- สร้างความประหลาดใจให้ผู้ใช้: การใช้สิทธิ์เข้าถึงเครือข่ายที่ฟังก์ชันการทำงานหลักของแอปไม่ได้อธิบายไว้อย่างชัดเจน เช่น โปรแกรมแก้ไขข้อความที่สื่อสารกับอุปกรณ์ในเครือข่ายท้องถิ่น
- การสแกนเครือข่ายโดยพลการ: การสแกนเครือข่ายท้องถิ่นของผู้ใช้ในวงกว้าง (เช่น การสแกนพอร์ต 192.168.1.0/24) เพื่อสร้างโปรไฟล์ผู้ใช้หรือค้นหาอุปกรณ์ที่ไม่เกี่ยวข้อง
- การกำหนดเป้าหมายอุปกรณ์ในเครือข่ายภายใน: เราไม่อนุญาตให้พยายามตรวจสอบ กำหนดค่าใหม่ หรือโจมตีอุปกรณ์อื่นๆ ในเครือข่ายภายในโดยเด็ดขาด
Controlled Frame API
องค์ประกอบ <controlledframe> อนุญาตให้ฝังและแก้ไขเนื้อหาข้ามต้นทาง รวมถึงการแอบฝังสคริปต์และการเปลี่ยนแปลงส่วนหัว
อนุญาต
- การปรับปรุงอินเทอร์เฟซผู้ใช้: การฝังบริการของบุคคลที่สามและการแทรก CSS เพื่อซ่อนองค์ประกอบ UI ที่ไม่เกี่ยวข้องหรือมอบประสบการณ์การใช้งานที่สอดคล้องกันมากขึ้น
- เป็นตัวกลางในการสื่อสารที่ปลอดภัย: ทำหน้าที่เป็นผู้ควบคุมโดยรับคำขอจากหน้าเว็บที่ฝังด้วย
postMessageและส่งคืนเฉพาะข้อมูลที่จำเป็นซึ่งผ่านการล้างข้อมูลแล้วซึ่งดึงข้อมูลผ่าน API ที่มีสิทธิ์
ไม่อนุญาต
- การขโมยข้อมูลเข้าสู่ระบบของผู้ใช้: การแทรกสคริปต์เพื่อบันทึกรหัสผ่าน คุกกี้เซสชัน หรือข้อมูลผู้ใช้ที่ละเอียดอ่อนอื่นๆ จากเนื้อหาที่ฝัง
- การละเมิดข้อกำหนดในการให้บริการ: การดัดแปลงแพลตฟอร์มที่ฝังในลักษณะที่ละเมิดข้อกำหนดในการให้บริการ เช่น การคลิกโฆษณาแบบเป็นโปรแกรมหรือการคัดลอกเนื้อหาโดยไม่ได้รับอนุญาต
- การพร็อกซีการเข้าถึงที่มีสิทธิ์: การสร้างการส่งผ่านที่ให้เนื้อหาแบบฝังที่ไม่น่าเชื่อถือเข้าถึง IWA API ที่มีสิทธิ์โดยตรงหรือแบบไม่มีการควบคุม
- การใช้ AI ที่ไม่มีการควบคุม: การดำเนินการในนามของผู้ใช้ที่เข้าสู่ระบบผ่าน AI โดยไม่มีข้อจำกัดของ Use Case ที่เฉพาะเจาะจงและโปร่งใส
การบันทึกหน้าจอแบบไม่จำกัด
อนุญาตให้จับภาพหน้าจอโดยไม่ต้องแจ้งให้ผู้ใช้ให้สิทธิ์ซ้ำๆ เหมือนในเว็บมาตรฐาน
อนุญาต
- การให้บริการฟังก์ชันหลัก: การใช้การจับภาพหน้าจอเป็นส่วนที่เห็นได้ชัดของบริการของแอป เช่น ในฟีเจอร์การประชุมเสมือนหรือการบันทึกวิดีโอสอน
- สร้างการรับรู้ของผู้ใช้: แจ้งให้ผู้ใช้ทราบอย่างชัดเจนว่าอาจมีการบันทึกก่อนที่ผู้ใช้จะมีส่วนร่วมกับแอปพลิเคชัน
ไม่อนุญาต
- การบันทึกอย่างลับๆ: การจับภาพหน้าจอของผู้ใช้โดยที่ผู้ใช้ไม่ทราบและไม่ได้ให้ความยินยอมอย่างชัดเจนล่วงหน้า
- ละเมิดกฎระเบียบด้านความเป็นส่วนตัว: การมีส่วนร่วมในแนวทางการบันทึกใดๆ ที่ละเมิดกฎหมายความเป็นส่วนตัวในท้องถิ่นหรือระหว่างประเทศ
WebUSB ที่ไม่จำกัด
WebUSB ที่ไม่จำกัดจะข้ามรายการที่บล็อก WebUSB มาตรฐานเพื่อให้มีการโต้ตอบระดับต่ำกับอุปกรณ์
อนุญาต
- รองรับฮาร์ดแวร์ที่เป็นกรรมสิทธิ์: การโต้ตอบกับฮาร์ดแวร์เฉพาะทางหรือฮาร์ดแวร์รุ่นเก่าที่ไม่มี Web API ระดับสูง เช่น คอนโทรลเลอร์อุตสาหกรรม
อนุญาตแล้ว
- การข้าม API เฉพาะ: การใช้ WebUSB สำหรับอุปกรณ์ที่มี API ที่เฉพาะเจาะจงและจำกัดมากกว่า เช่น สมาร์ทการ์ด (ใช้ Smart Card API) หรือที่เก็บข้อมูลภายนอก (ใช้ File System Access API)
การจัดการหน้าต่าง (window.open และ window.focus)
IWA สามารถสร้างป๊อปอัปและโฟกัสหน้าต่างได้โดยไม่ต้องใช้ท่าทางของผู้ใช้ตามที่เว็บมาตรฐานกำหนด
อนุญาต
- การแจ้งเตือนเมื่องานเสร็จสมบูรณ์: โฟกัสหน้าต่างแอปเมื่องานเบื้องหลังที่สำคัญซึ่งเริ่มต้นโดยผู้ใช้ เช่น การเรนเดอร์วิดีโอ เสร็จสมบูรณ์
ไม่อนุญาต
- การส่งสแปม: การเปิดหน้าต่างที่ไม่พึงประสงค์หลายหน้าต่างให้ผู้ใช้
- ฟิชชิง: การเปิดหน้าต่างที่ออกแบบมาเพื่อเลียนแบบกล่องโต้ตอบของระบบหรือหลอกลวงผู้ใช้
- การแย่งโฟกัส: รบกวนผู้ใช้โดยการแย่งโฟกัสจากแอปพลิเคชันอื่นๆ สำหรับเหตุการณ์ที่ไม่สำคัญ
บทสรุป
สถาปัตยกรรมความปลอดภัยของ Isolated Web App ออกแบบมาเพื่อช่วยให้นักพัฒนาแอปทำงานได้ดียิ่งขึ้นในขณะที่ยังคงรักษาสภาพแวดล้อมที่มีความน่าเชื่อถือสูงสำหรับผู้ใช้ การปฏิบัติตามหลักเกณฑ์เหล่านี้จะช่วยให้มั่นใจได้ว่าแอปพลิเคชันของคุณยังคงเป็นส่วนหนึ่งของระบบนิเวศ IWA อย่างมีความรับผิดชอบ ประเด็นสำคัญที่สุดจากคู่มือนี้ ได้แก่
- ให้ความสำคัญกับความโปร่งใส: พฤติกรรมของแอปพลิเคชันควรสอดคล้องกับวัตถุประสงค์ที่ระบุไว้เสมอ และไม่ควรใช้ฟังก์ชันการทำงานที่ทำให้ผู้ใช้ประหลาดใจหรือทำให้ผู้ใช้รู้สึกว่าถูกหลอก
- บังคับใช้ความสมบูรณ์ของแพ็กเกจ: ตรรกะที่เรียกใช้งานได้ทั้งหมดต้องอยู่ในแพ็กเกจ IWA ของคุณเองเพื่อให้สามารถทำการยืนยันแบบคงที่ได้ เราห้ามอย่างเด็ดขาดไม่ให้มีการข้ามโมเดลความปลอดภัยผ่านการโหลดโค้ดแบบไดนามิกด้านข้างหรือการใช้ตัวแปลภาษาจากระยะไกล
- ปฏิบัติตามหลักการสิทธิ์น้อยที่สุด: เลือก API ที่มีข้อจำกัดมากที่สุดเสมอสำหรับงานที่กำหนด ควรใช้ API ของ IWA ที่มีสิทธิ์ก็ต่อเมื่อ Web API มาตรฐานไม่เพียงพอสำหรับฟังก์ชันหลักของแอปพลิเคชัน
- ทำหน้าที่เป็นผู้ควบคุม: เมื่อใช้เครื่องมือที่มีประสิทธิภาพอย่าง
<controlledframe>IWA ของคุณต้องทำหน้าที่เป็นตัวกลางที่ปลอดภัยแทนที่จะเป็นพร็อกซีแบบโปร่งใสสำหรับเนื้อหาที่ไม่น่าเชื่อถือ
ก่อนเผยแพร่ IWA ให้ตรวจสอบการติดตั้งใช้งานครั้งสุดท้ายโดยถามคำถามต่อไปนี้
- ฉันใช้ API ที่ง่ายที่สุดและมีข้อจำกัดมากที่สุดสำหรับงานนี้หรือไม่
- ผู้ใช้จะประหลาดใจหรือรู้สึกว่าถูกแอปของฉันหลอกไหม
หากคำตอบของคำถามแรกคือ "ไม่" หรือคำตอบของคำถามที่สองคือ "ใช่" แสดงว่าแอปพลิเคชันของคุณอาจละเมิดนโยบายด้านความปลอดภัยของ IWA และอาจถูกนำออก