หากไม่คุ้นเคยกับนโยบายรักษาความปลอดภัยเนื้อหา (CSP) คุณก็ควรเริ่มต้นด้วยข้อมูลเบื้องต้นเกี่ยวกับนโยบายรักษาความปลอดภัยเนื้อหา เอกสารดังกล่าวครอบคลุมมุมมองแพลตฟอร์มเว็บที่กว้างขึ้นของ CSP แต่ CSP ของแอป Chrome นั้นไม่ยืดหยุ่นเท่า
CSP เป็นนโยบายที่จะช่วยลดปัญหาการเขียนสคริปต์ข้ามเว็บไซต์ และทุกคนทราบดีว่าการใช้สคริปต์ข้ามเว็บไซต์เป็นสิ่งไม่ดี เราคงจะไม่พยายามทำให้คุณเชื่อว่า CSP เป็นนโยบายใหม่ที่เข้าใจได้ง่าย งานนี้มีขั้นตอนต่างกัน คุณจะต้องเรียนรู้วิธีทำงานพื้นฐานให้แตกต่างออกไป
เอกสารนี้มีจุดประสงค์เพื่อแจ้งให้คุณทราบอย่างชัดเจนว่านโยบาย CSP สำหรับแอป Chrome คืออะไร สิ่งที่คุณต้องทำเพื่อให้เป็นไปตามนโยบายดังกล่าว รวมถึงวิธีดำเนินงานพื้นฐานเหล่านั้นให้เป็นไปตามข้อกำหนดของ CSP
CSP สำหรับแอป Chrome คืออะไร
นโยบายรักษาความปลอดภัยเนื้อหาสำหรับแอป Chrome จะจำกัดไม่ให้คุณทำสิ่งต่อไปนี้
- คุณไม่สามารถใช้การเขียนสคริปต์ในหน้าในหน้าแอป Chrome ได้ การจำกัดนี้จะแบนทั้งการบล็อก
<script>
และเครื่องจัดการเหตุการณ์ (<button onclick="...">
) - คุณอ้างอิงทรัพยากรภายนอกในไฟล์แอปใดๆ ไม่ได้ (ยกเว้นแหล่งข้อมูลวิดีโอและเสียง) คุณไม่สามารถฝังแหล่งข้อมูลภายนอกใน iframe ได้
- คุณไม่สามารถใช้เมธอดสตริงสู่ JavaScript เช่น
eval()
และnew Function()
ซึ่งดำเนินการผ่านค่านโยบายต่อไปนี้
default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;
แอป Chrome อ้างอิงสคริปต์และออบเจ็กต์ภายในแอปได้เท่านั้น ยกเว้นไฟล์สื่อ (แอปอาจอ้างถึงวิดีโอและเสียงนอกแพ็กเกจ) ส่วนขยายของ Chrome จะช่วยให้คุณผ่อนคลายนโยบายรักษาความปลอดภัยเนื้อหาเริ่มต้น และแอป Chrome จะไม่ช่วยผ่อนปรน
วิธีปฏิบัติตามข้อกำหนดของ CSP
JavaScript และทรัพยากรทั้งหมดควรอยู่ในเครื่อง (ทุกอย่างจะได้รับการจัดแพ็กเกจในแอป Chrome ของคุณ)
"แล้วฉันจะ..."
เป็นไปได้ว่าคุณใช้ไลบรารีที่มีเทมเพลต ซึ่งไลบรารีเหล่านี้หลายๆ ตัวไม่สามารถใช้ร่วมกับ CSP ได้ คุณอาจต้องการเข้าถึงแหล่งข้อมูลภายนอกในแอปด้วย (รูปภาพจากภายนอก เนื้อหาจากเว็บไซต์)
ใช้ไลบรารีที่มีเทมเพลต
ใช้ไลบรารีที่มีเทมเพลตที่คอมไพล์ไว้ล่วงหน้า เท่านี้คุณก็พร้อมใช้งานแล้ว คุณยังสามารถใช้ไลบรารีที่ไม่ได้มีการคอมไพล์ล่วงหน้า แต่คุณจะต้องแก้ไขเพิ่มเติมและมีข้อจำกัด
คุณจะต้องใช้แซนด์บ็อกซ์เพื่อแยกเนื้อหาที่คุณต้องการ "ประเมิน" แซนด์บ็อกซ์จะยกระดับ CSP ในเนื้อหาที่คุณระบุ หากคุณต้องการใช้ Chrome API ที่มีประสิทธิภาพมากในแอป Chrome เนื้อหาที่แซนด์บ็อกซ์จะไม่สามารถโต้ตอบกับ API เหล่านี้ได้โดยตรง (โปรดดูเนื้อหาในเครื่องของแซนด์บ็อกซ์)
เข้าถึงทรัพยากรระยะไกล
คุณสามารถดึงข้อมูลทรัพยากรระยะไกลผ่าน XMLHttpRequest
และแสดงผ่าน URL blob:
, data:
หรือ filesystem:
(ดูการอ้างอิงทรัพยากรภายนอก)
โปรแกรมเล่นวิดีโอและเสียงโหลดจากบริการระยะไกลได้เนื่องจากมีลักษณะการทำงานแบบสำรองที่ดีเมื่อออฟไลน์หรือมีการเชื่อมต่อที่ไม่สม่ำเสมอ
ฝังเนื้อหาเว็บ
คุณเรียกใช้ URL ภายนอกได้โดยใช้แท็ก WebView แทนการใช้ iframe (ดูฝังหน้าเว็บภายนอก)