trusty — Website Trust Platform
Website Security

Content Security Policy (CSP) คืออะไร? คู่มือสำหรับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์

Content Security Policy (CSP) คืออะไร สำหรับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์ — หลักการ ขั้นตอนตรวจสอบ และข้อผิดพลาดที่พบบ่อย สำหรับทีมพัฒนาเว็บไซต์ที่ดูแลลูกค้าหลายราย

📅 เผยแพร่ 16 กรกฎาคม 2569อัปเดตล่าสุด 16 กรกฎาคม 2569✍️ เขียนโดย trusty Editorial Team⏱ อ่าน 9 นาที
A group of people in a dark room working on computers, related to cybersecurity.
ภาพโดย Tima Miroshnichenko จาก Pexels

💬 สรุปสั้น ๆ

Content Security Policy (CSP) คืออะไร คือหัวข้อที่ทีมพัฒนาเว็บไซต์ที่ดูแลลูกค้าหลายรายในเอเจนซีและฟรีแลนซ์ทำเว็บไซต์ควรเข้าใจทั้งหลักการและวิธีตรวจสอบจริง บทความนี้สรุปขั้นตอนปฏิบัติ เช็กลิสต์ 5 ข้อ และข้อผิดพลาดที่พบบ่อยจากการตรวจสอบระบบจริง เพื่อให้นำไปใช้ปรับปรุงได้ทันที

Content Security Policy (CSP) คือ HTTP response header ที่บอกเบราว์เซอร์ว่าเนื้อหาประเภทใด (สคริปต์ รูปภาพ สไตล์ ฟอนต์ iframe) ได้รับอนุญาตให้โหลดจากแหล่งใดบ้าง เป็นกลไกสำคัญในการลดความเสี่ยงจากการโจมตีแบบ Cross-Site Scripting (XSS) และการฝังสคริปต์แปลกปลอมจากบุคคลที่สาม สำหรับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์ ที่มีการติดตั้งสคริปต์จากผู้ให้บริการภายนอกจำนวนมาก (analytics, chat, ads, payment) CSP ที่ตั้งค่าไม่ครบถ้วนอาจทำให้เว็บไซต์เสี่ยงต่อการถูกฝังสคริปต์อันตรายโดยไม่รู้ตัว

บทความนี้อธิบายว่า CSP ทำงานอย่างไร directive หลักที่ต้องรู้จัก ทีมพัฒนาเว็บไซต์ที่ดูแลลูกค้าหลายราย ควรตั้งค่าและตรวจสอบอย่างไรสำหรับเว็บไซต์ในเอเจนซีและฟรีแลนซ์ทำเว็บไซต์ พร้อมข้อผิดพลาดที่พบบ่อยจากการตั้งค่า CSP ในระบบจริง

CSP ไม่ใช่กลไกป้องกัน XSS แบบสมบูรณ์ในตัวเอง แต่เป็นชั้นป้องกันเพิ่มเติม (defense in depth) ที่ทำงานควบคู่กับการ sanitize input และ encode output อย่างถูกต้องในโค้ดฝั่ง backend/frontend

CSP ทำงานอย่างไร และ Directive หลักที่ต้องรู้จัก

CSP กำหนดผ่าน HTTP header ชื่อ Content-Security-Policy โดยแต่ละ directive ควบคุมทรัพยากรคนละประเภท เช่น default-src เป็นค่าตั้งต้นเมื่อไม่ได้ระบุ directive อื่นเจาะจง script-src ควบคุมแหล่งที่มาของ JavaScript style-src ควบคุม CSS img-src ควบคุมรูปภาพ และ frame-ancestors ควบคุมว่าเว็บไซต์ใดสามารถฝังหน้านี้ผ่าน iframe ได้บ้าง (ทำหน้าที่คล้าย X-Frame-Options แต่ยืดหยุ่นกว่า) สำหรับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์ ที่ต้องอนุญาตสคริปต์จากผู้ให้บริการภายนอกหลายราย การเขียน CSP ที่ครอบคลุมทุก domain ที่จำเป็นโดยไม่กว้างเกินไปจนเสียประโยชน์ของการป้องกันเป็นเรื่องที่ต้องวางแผนอย่างรอบคอบ

เทคนิคที่ช่วยให้ CSP เข้มงวดขึ้นโดยไม่กระทบการทำงานของสคริปต์ inline ที่จำเป็นคือการใช้ nonce (ค่าสุ่มที่สร้างใหม่ทุก request) หรือ hash ของสคริปต์นั้น แทนการเปิด 'unsafe-inline' ซึ่งลดทอนประโยชน์ของ CSP ลงอย่างมาก เพราะเท่ากับอนุญาตให้สคริปต์ inline ใด ๆ ทำงานได้

Directive ที่พบบ่อยและวิธีตั้งค่าอย่างปลอดภัย

ตารางด้านล่างสรุป directive ที่ทีม Engineering ควรพิจารณาตั้งค่าเป็นลำดับแรก

Directiveควบคุมอะไรแนวทางตั้งค่าที่แนะนำ
default-srcค่าตั้งต้นเมื่อไม่ได้ระบุ directive อื่นเริ่มจาก 'self' แล้วค่อยเปิดเพิ่มเฉพาะที่จำเป็น
script-srcแหล่งที่มาของ JavaScript ที่อนุญาตให้รันระบุ domain เจาะจง หรือใช้ nonce/hash แทน 'unsafe-inline'
frame-ancestorsเว็บไซต์ใดสามารถฝังหน้านี้ใน iframe ได้ตั้งเป็น 'none' หรือ 'self' หากไม่จำเป็นต้องให้ฝัง
report-uri / report-toปลายทางที่เบราว์เซอร์ส่งรายงานเมื่อมีการละเมิด policyตั้งค่าไว้เพื่อเฝ้าระวังการละเมิดก่อนบังคับใช้จริง

เลื่อนซ้าย-ขวาได้บนมือถือ

ขั้นตอนวางแผนและติดตั้ง CSP

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

  1. สำรวจสคริปต์ ฟอนต์ รูปภาพ และ iframe ทั้งหมดที่เว็บไซต์โหลดอยู่ในปัจจุบัน ทั้งจาก first-party และ third-party
  2. เริ่มต้นด้วยโหมด Content-Security-Policy-Report-Only เพื่อดูว่าจะมีทรัพยากรใดถูกบล็อกก่อนบังคับใช้จริง ลดความเสี่ยงที่เว็บไซต์จะพังทันทีที่เปิดใช้งาน
  3. วิเคราะห์รายงานที่ได้จาก report-uri และปรับ directive ให้ครอบคลุม domain ที่จำเป็นจริง โดยหลีกเลี่ยงการเปิดกว้างเกินความจำเป็น
  4. แทนที่ 'unsafe-inline' ด้วย nonce หรือ hash สำหรับสคริปต์ inline ที่จำเป็นต้องมี
  5. เปลี่ยนจากโหมด Report-Only เป็นบังคับใช้จริง (Content-Security-Policy) หลังยืนยันว่าไม่มีทรัพยากรสำคัญถูกบล็อกโดยไม่ตั้งใจ
  6. ตรวจสอบซ้ำทุกครั้งที่มีการติดตั้งสคริปต์หรือแอปใหม่ เพราะ domain ใหม่ที่ไม่ได้อยู่ใน policy จะถูกบล็อกทันที

การตรวจสอบและหลักฐาน (Audit)

เครื่องมือตรวจสอบ CSP ที่ใช้งานง่ายคือดูที่ Response Headers ผ่าน DevTools > Network เพื่อยืนยันว่า header ถูกส่งออกจริงในทุกหน้า และดูที่ Console เพื่อตรวจสอบว่ามี CSP violation ถูก log หรือไม่ระหว่างใช้งานเว็บไซต์ตามปกติ

ควรเก็บ policy ที่ใช้งานจริงในแต่ละช่วงเวลาไว้เป็นเวอร์ชัน (เช่นในไฟล์ config ที่มี version control) เพื่อให้ย้อนดูได้ว่ามีการเปลี่ยนแปลง policy เมื่อใด และเปลี่ยนเพื่อรองรับสคริปต์ตัวใด

ความสัมพันธ์ระหว่าง CSP กับ HTTP Security Headers อื่น

CSP เป็นหนึ่งใน HTTP Security Headers ที่ทำงานร่วมกับ header อื่นเพื่อเสริมความปลอดภัยของเว็บไซต์ในภาพรวม เช่น Strict-Transport-Security ที่บังคับการเชื่อมต่อผ่าน HTTPS หรือ X-Content-Type-Options ที่ป้องกันเบราว์เซอร์เดา MIME type ผิดพลาด ทีมที่ดูแลความปลอดภัยเว็บไซต์ควรพิจารณาตั้งค่า header เหล่านี้ไปพร้อมกันเป็นชุดเดียว แทนที่จะตั้งค่าทีละตัวแยกกันในช่วงเวลาต่างกัน

การจัดการ CSP ในสถาปัตยกรรมหลายทีมและ Microfrontend

เมื่อเว็บไซต์ประกอบด้วยหลายทีมพัฒนาแยกส่วนกัน เช่น สถาปัตยกรรมแบบ microfrontend ที่แต่ละทีมดูแลส่วนของหน้าเว็บของตัวเอง การตั้งค่า CSP แบบรวมศูนย์โดยทีมกลางเพียงทีมเดียวอาจกลายเป็นคอขวด เพราะทุกครั้งที่ทีมย่อยต้องการเพิ่มโดเมนสคริปต์ใหม่ต้องรอทีมกลางอนุมัติและแก้ policy ให้ แนวทางที่ยืดหยุ่นกว่าคือกำหนดโครงสร้าง policy กลางที่ครอบคลุมกฎพื้นฐานร่วมกัน แล้วเปิดช่องให้แต่ละทีมเสนอโดเมนเพิ่มเติมผ่านกระบวนการ review ที่ชัดเจนและมีบันทึกเหตุผลประกอบ

ในสภาพแวดล้อมที่ใช้ CDN หรือ edge function ในการประกอบหน้าเว็บจากหลายแหล่ง การฉีดค่า nonce สำหรับ CSP ควรทำที่ชั้น edge ก่อนส่งมอบ HTML ให้เบราว์เซอร์ เพื่อให้ nonce เปลี่ยนใหม่ทุกครั้งที่มีการร้องขอหน้าเว็บ และสอดคล้องกันระหว่าง header กับ inline script ที่แนบ nonce เดียวกันมาด้วย หากค่า nonce ไม่ตรงกันระหว่างสองจุดนี้ สคริปต์ inline ที่จำเป็นจะถูกบล็อกทันที

เว็บไซต์ที่ใช้ไลบรารี CSS-in-JS บางตัวจำเป็นต้องแทรกสไตล์แบบ inline ขณะรันไทม์ ซึ่งอาจขัดกับ policy ที่เข้มงวดด้าน style-src ทีมพัฒนาควรตรวจสอบว่าไลบรารีที่ใช้รองรับการทำงานร่วมกับ nonce หรือ hash หรือไม่ ก่อนตัดสินใจเปิดข้อยกเว้นแบบกว้าง และควรมีแดชบอร์ดสรุปรายงาน CSP violation จากผู้ใช้จริงเพื่อติดตามว่ามีทรัพยากรใดถูกบล็อกโดยไม่ตั้งใจหลังปรับ policy แต่ละครั้ง

พร้อมตรวจสอบความน่าเชื่อถือของเว็บไซต์คุณหรือยัง?

ทดลองใช้งาน trusty ฟรี ไม่ต้องใช้บัตรเครดิต เริ่มสแกนได้ทันที

ทดลองใช้งานระบบฟรี

สถานการณ์ตัวอย่างสำหรับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์

เพื่อให้เห็นภาพชัดขึ้นว่าหลักการข้างต้นนำไปใช้จริงอย่างไร ลองพิจารณาสถานการณ์ของเอเจนซีที่ดูแลเว็บไซต์ลูกค้าหลายสิบรายและต้องการมาตรฐานเดียวที่ใช้ซ้ำได้กับทุกโปรเจกต์ ที่ต้องนำแนวทางในบทความนี้ไปปรับใช้

สถานการณ์ที่ 1 — เมื่อเริ่มตรวจสอบตามหัวข้อ "สำรวจทรัพยากรทั้งหมดที่เว็บไซต์โหลดจาก first-party และ third-party ก่อนตั้งค่า policy" ทีมมักพบว่าสิ่งที่คิดว่าตั้งค่าไว้แล้วจริง ๆ ยังไม่ครบถ้วน เพราะการตั้งค่าเดิมทำไว้นานแล้วโดยไม่มีใครทบทวนซ้ำ การไล่ตรวจสอบตามเช็กลิสต์อย่างเป็นระบบจึงช่วยจับจุดที่ตกหล่นได้ก่อนที่จะกลายเป็นปัญหาจริง

สถานการณ์ที่ 2 — ข้อผิดพลาดที่พบบ่อยอย่าง "เปิด 'unsafe-inline' ไว้ถาวรเพราะแก้ปัญหาสคริปต์ inline ไม่ทัน ทำให้ CSP แทบไม่ป้องกันอะไรเลย" มักเกิดขึ้นเมื่อทีมงานเปลี่ยนคนดูแลหรือมีการเพิ่มเครื่องมือใหม่โดยไม่ได้ส่งต่อบริบทเดิมให้ครบถ้วน สำหรับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์ การมีเอกสารและ checklist ที่ใช้ซ้ำได้ช่วยลดความเสี่ยงจากการที่ความรู้อยู่กับคนใดคนหนึ่งเพียงคนเดียว

สถานการณ์ที่ 3 — เมื่อเกิดคำถามจากผู้บริหารหรือลูกค้าเกี่ยวกับหัวข้อนี้อย่างกะทันหัน การมีหลักฐานการตรวจสอบที่บันทึกไว้เป็นระยะ (ตามที่อธิบายในหัวข้อการตรวจสอบและหลักฐานด้านบน) ช่วยให้ ทีมพัฒนาเว็บไซต์ที่ดูแลลูกค้าหลายราย ตอบคำถามได้ทันทีโดยไม่ต้องเริ่มตรวจสอบใหม่ทั้งหมดภายใต้ความกดดันด้านเวลา

สถานการณ์ที่ 4 — เมื่อองค์กรเติบโตขึ้นและต้องขยายทีมหรือเปิดตัวผลิตภัณฑ์ใหม่ ทีมพัฒนาเว็บไซต์ที่ดูแลลูกค้าหลายราย มักต้องถ่ายทอดมาตรฐานที่วางไว้ให้สมาชิกใหม่เข้าใจได้เร็วโดยไม่ต้องอาศัยการสอนงานแบบตัวต่อตัวทุกครั้ง การมีเอกสารอ้างอิงที่ปรับปรุงให้ตรงกับบริบทของเอเจนซีและฟรีแลนซ์ทำเว็บไซต์อยู่เสมอ ช่วยให้การขยายทีมเป็นไปอย่างราบรื่นและลดความเสี่ยงที่มาตรฐานจะลดต่ำลงเมื่อมีคนใหม่เข้ามาร่วมงาน

ทำไม Content Security Policy (CSP) สำคัญสำหรับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์

เอเจนซีที่ดูแลเว็บไซต์ลูกค้าหลายสิบรายและต้องการมาตรฐานเดียวที่ใช้ซ้ำได้กับทุกโปรเจกต์ มักเผชิญแรงกดดันสองด้านพร้อมกัน คือต้องส่งมอบงานให้ทันเวลา และต้องไม่สร้างความเสี่ยงด้าน compliance หรือความปลอดภัยที่ตามแก้ทีหลังยากกว่าการทำให้ถูกต้องตั้งแต่แรก การนำหลักการในบทความนี้ไปใช้เป็นมาตรฐานเดียวกันทั้งทีมช่วยลดความเสี่ยงที่เกิดจากการตีความไม่ตรงกันระหว่างสมาชิกในทีม โดยเฉพาะเมื่อมีการเปลี่ยนผู้รับผิดชอบหรือขยายทีมเพิ่มขึ้น

สำหรับภาพรวมหัวข้อที่เกี่ยวข้องเพิ่มเติม ทีมสามารถดูแนวทางสำหรับอุตสาหกรรมอื่นได้ที่ SaaS และ Enterprise หรือดูภาพรวมหมวดหมู่ทั้งหมดได้ที่ website-security

เช็กลิสต์ปฏิบัติ

  • สำรวจทรัพยากรทั้งหมดที่เว็บไซต์โหลดจาก first-party และ third-party ก่อนตั้งค่า policy
  • เริ่มด้วยโหมด Report-Only ก่อนบังคับใช้จริงเสมอ
  • แทนที่ 'unsafe-inline' ด้วย nonce หรือ hash สำหรับสคริปต์ inline ที่จำเป็น
  • ตั้งค่า report-uri เพื่อเฝ้าระวังการละเมิด policy อย่างต่อเนื่อง
  • ตรวจสอบ policy ซ้ำทุกครั้งที่ติดตั้งสคริปต์หรือแอปใหม่

ข้อผิดพลาดที่พบบ่อย

  • เปิด 'unsafe-inline' ไว้ถาวรเพราะแก้ปัญหาสคริปต์ inline ไม่ทัน ทำให้ CSP แทบไม่ป้องกันอะไรเลย
  • บังคับใช้ policy จริงทันทีโดยไม่ผ่านโหมด Report-Only ก่อน จนเว็บไซต์บางส่วนใช้งานไม่ได้
  • ลืมอัปเดต policy เมื่อเพิ่มสคริปต์หรือแอปใหม่ ทำให้ฟีเจอร์ใหม่ถูกบล็อกโดยไม่มีใครสังเกตทันที
  • ตั้งค่า default-src กว้างเกินไป (เช่น อนุญาตทุก domain) จนเสียประโยชน์ของ CSP ไปเกือบทั้งหมด

สรุป

Content Security Policy (CSP) คืออะไร คือหัวข้อที่ ทีมพัฒนาเว็บไซต์ที่ดูแลลูกค้าหลายราย ในเอเจนซีและฟรีแลนซ์ทำเว็บไซต์ ควรเข้าใจทั้งหลักการและขั้นตอนปฏิบัติจริง ไม่ใช่แค่ทฤษฎี การตรวจสอบอย่างเป็นระบบ บันทึกหลักฐานไว้ต่อเนื่อง และทบทวนกระบวนการเป็นระยะ ช่วยให้ทีมพร้อมตอบคำถามทั้งจากผู้ใช้งาน ผู้บริหาร และหน่วยงานที่เกี่ยวข้องได้อย่างมั่นใจ

แหล่งข้อมูลอ้างอิง

คำถามที่พบบ่อย

Content Security Policy (CSP) คืออะไร

CSP คือ HTTP response header ที่กำหนดว่าเนื้อหาประเภทใด (สคริปต์ รูปภาพ สไตล์ iframe) โหลดจากแหล่งใดได้บ้าง เป็นกลไกลดความเสี่ยงจากการโจมตีแบบ XSS และการฝังสคริปต์แปลกปลอม

ทำไมต้องเริ่มด้วยโหมด Report-Only ก่อน

เพื่อดูว่าจะมีทรัพยากรใดถูกบล็อกก่อนบังคับใช้จริง ลดความเสี่ยงที่เว็บไซต์จะพังทันทีที่เปิดใช้งาน policy ที่เข้มงวดเกินไปโดยไม่รู้ตัว

CSP สำคัญกับเอเจนซีและฟรีแลนซ์ทำเว็บไซต์อย่างไร

เอเจนซีที่ดูแลเว็บไซต์ลูกค้าหลายสิบรายและต้องการมาตรฐานเดียวที่ใช้ซ้ำได้กับทุกโปรเจกต์ ต้องตั้งค่า CSP ให้ครอบคลุมสคริปต์จากผู้ให้บริการภายนอกที่จำเป็นจริง โดยไม่เปิดกว้างเกินความจำเป็นจนเสียประโยชน์ของการป้องกัน

'unsafe-inline' คืออะไรและทำไมควรหลีกเลี่ยง

'unsafe-inline' คือค่าที่อนุญาตให้สคริปต์ inline ใด ๆ ทำงานได้ ซึ่งลดทอนประโยชน์ของ CSP ลงอย่างมาก ควรใช้ nonce หรือ hash แทนสำหรับสคริปต์ inline ที่จำเป็นต้องมี

ต้องอัปเดต CSP เมื่อใดบ้าง

ทุกครั้งที่ติดตั้งสคริปต์หรือแอปใหม่ที่โหลดทรัพยากรจาก domain ที่ยังไม่ได้รวมอยู่ใน policy เพราะ domain ใหม่จะถูกบล็อกทันทีหากไม่ได้รับอนุญาตไว้ล่วงหน้า

เนื้อหานี้จัดทำขึ้นเพื่อให้ข้อมูลทั่วไปเท่านั้น ไม่ถือเป็นคำแนะนำทางกฎหมาย กรุณาปรึกษาผู้เชี่ยวชาญด้านกฎหมายหรือ Data Protection Officer ของหน่วยงานท่านก่อนนำไปปฏิบัติจริง

พร้อมตรวจสอบความน่าเชื่อถือของเว็บไซต์คุณหรือยัง?

ทดลองใช้งาน trusty ฟรี ไม่ต้องใช้บัตรเครดิต เริ่มสแกนได้ทันที