Subresource Integrity (SRI) คืออะไร
Subresource Integrity คืออะไร
Subresource Integrity (SRI) ให้ผู้เขียนหน้าเว็บระบุแฮชของไฟล์สคริปต์หรือสไตล์ เบราว์เซอร์จะรันไฟล์เมื่อแฮชตรงเท่านั้น มาตรฐานอยู่ที่ W3C Subresource Integrity และคำอธิบายใช้งานที่ MDN SRI
ประโยชน์หลักคือลดความเสี่ยงเมื่อ CDN หรือโฮสต์บุคคลที่สามถูกแก้ไขไฟล์
ตัวอย่าง
html
<script src="https://cdn.example.com/library.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>อัลกอริทึมที่รองรับทั่วไปคือ SHA-256, SHA-384 และ SHA-512 ต้องมี crossorigin ที่เข้ากันได้เมื่อโหลดข้าม origin เพราะเบราว์เซอร์ต้องอ่านเนื้อหาเพื่อตรวจแฮช
สร้างค่า integrity ได้จาก OpenSSL
bash
openssl dgst -sha384 -binary library.js | openssl base64 -Aหรือใช้เครื่องมือที่ MDN อ้างถึงในเอกสาร SRI
ข้อจำกัด
- เมื่ออัปเดตไลบรารี ต้องเปลี่ยนแฮชด้วย ไม่เช่นนั้นสคริปต์จะถูกบล็อก
- SRI ไม่ได้เซ็นชื่อผู้เผยแพร่ แค่ตรึงเนื้อหาที่คุณคาดไว้ ณ เวลาที่สร้างแฮช
- ใช้กับไฟล์ที่เปลี่ยนบ่อยโดยไม่มีกระบวนการปล่อยเวอร์ชันจะทำให้ปฏิบัติการยาก
สรุป
ใช้ SRI กับสคริปต์/สไตล์จาก CDN ที่ล็อกเวอร์ชัน และเก็บแฮชไว้ในรีวิวโค้ดเช่นเดียวกับ dependency อื่น