นโยบายรักษาความปลอดภัยเนื้อหา

หากไม่คุ้นเคยกับนโยบายรักษาความปลอดภัยเนื้อหา (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 (ดูฝังหน้าเว็บภายนอก)