Security Headers

Content-Security-Policy เชิงลึก

A
admin
3 พฤศจิกายน 2568 0 ครั้ง
แชร์:

Content-Security-Policy คืออะไร

Content-Security-Policy (CSP) เป็นเลเยอร์ลดความเสียหายเมื่อมี XSS หรือการโหลดทรัพยากรไม่พึงประสงค์ เบราว์เซอร์บังคับนโยบายตามที่เซิร์ฟเวอร์ส่งใน header เอกสารหลักอยู่ที่ MDN: Content Security Policy และ CSP Level 3

ไดเรกทิฟที่ใช้บ่อย

  • default-src เป็นค่าสำรองเมื่อไม่ได้ระบุชนิดทรัพยากร
  • script-src / style-src ควบคุมสคริปต์และสไตล์
  • img-src, connect-src, font-src ควบคุมรูป, fetch/XHR และฟอนต์
  • frame-ancestors ควบคุมว่าหน้านี้ถูกฝังในเฟรมที่ไหนได้บ้าง (แทน X-Frame-Options)
  • base-uri และ form-action จำกัดฐาน URL และการส่งฟอร์ม

nonce และ hash ดีกว่า unsafe-inline

'unsafe-inline' ใน script-src ทำให้ CSP ป้องกัน XSS ได้น้อยมาก แนวทางที่ OWASP แนะนำใน CSP Cheat Sheet คือใช้ nonce แบบสุ่มต่อคำตอบ หรือ hash ของสคริปต์อินไลน์ที่รู้ชุดแล้ว

code
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-rAnd0m123'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'

วิธีนำมาใช้โดยไม่ทำให้เว็บพัง

1. เริ่มด้วย Content-Security-Policy-Report-Only
2. เก็บรายงานจาก report-to หรือ endpoint รายงาน
3. ไล่ลดแหล่งที่มาที่ไม่จำเป็น
4. สลับเป็น enforce เมื่อรายงานเหลือแต่ที่ตั้งใจ

อย่าพึ่ง CSP เป็นการป้องกัน XSS เพียงอย่างเดียว ต้องมี encoding ผลลัพธ์และกรอบพัฒนาที่ปลอดภัยตาม OWASP XSS Prevention

สรุป

CSP ที่ดีแคบพอจะกันสคริปต์แปลกปลอม แต่กว้างพอให้แอปทำงานได้ ออกแบบร่วมกับทีมฟรอนต์เอนด์ ไม่ใช่คัดลอกนโยบายจากเว็บอื่นมาทั้งก้อน

แหล่งอ้างอิง

หมวดหมู่: Security Headers