Defaults.Exposed

Defaults.Exposedการแก้ไข › Content-Security-Policy (CSP)

วิธีแก้ไข Content-Security-Policy (CSP)

Content Security Policy คือกฎความปลอดภัยที่เว็บไซต์ของคุณส่งให้เบราว์เซอร์ของผู้เข้าชมทุกคน บอกอย่างแน่ชัดว่าโค้ดใดได้รับอนุญาตให้รัน หากไม่มี หากมีอะไรเป็นอันตรายเคยลงบนหน้า — ผ่านช่องความคิดเห็น ปลั๊กอินที่ถูกแฮ็ก หรือสคริปต์ของบุคคลที่สาม — เบราว์เซอร์จะรันมันได้อย่างอิสระ รวมถึงโค้ดที่คัดลอกหมายเลขบัตรและรหัสผ่านของลูกค้าเงียบๆ ขณะที่พวกเขาพิมพ์ โดยยังคงแสดงกุญแจอยู่

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

สิ่งนี้อาจทำให้คุณเสียค่าใช้จ่าย

เหตุใดจึงสำคัญ กุญแจพิสูจน์ว่าการเชื่อมต่อกับเว็บไซต์ของคุณเป็นส่วนตัว แต่ไม่ได้ทำอะไรเพื่อควบคุมว่าโค้ดใดรันเมื่อผู้เข้าชมอยู่บนหน้า Content Security Policy คือมาตรการป้องกันที่ทำ — มันบอกเบราว์เซอร์ให้เพิกเฉยสคริปต์ใดๆ ที่ไม่ได้มาจากแหล่งที่คุณไว้วางใจ ดังนั้นฟิลด์ที่ถูกดัดแปลง โฆษณา หรือปลั๊กอินเดียวไม่สามารถเปลี่ยนเป็นเครื่องมือขโมยเงินและข้อมูลของลูกค้าได้ มันเป็นการตรวจสอบที่มีคะแนนบนสกอร์การ์ดของคุณ มีคะแนนจริง และเป็นหนึ่งในสิ่งแรกที่การตรวจสอบความปลอดภัยระดับมืออาชีพมองหา

มันคืออะไรในคำพูดธรรมดา

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

Content Security Policy (มักย่อเป็น CSP) คือรายการกฎสั้นๆ ที่เว็บไซต์ของคุณแนบกับทุกหน้า บอกเบราว์เซอร์: “รันโค้ดจากแหล่งเหล่านี้ที่ฉันได้อนุมัติเท่านั้น และปฏิเสธทุกอย่างอื่น” มันความแตกต่างระหว่างไนท์คลับที่ปล่อยให้ทุกคนเข้าและไนท์คลับที่มีรายชื่อผู้เข้าชมที่ประตู

สาเหตุที่สำคัญมากคือเว็บไซต์ถูกดัดแปลงอย่างต่อเนื่อง — ไม่ใช่เสมอผ่านการแฮ็กเซิร์ฟเวอร์ แต่ผ่านประตูหลังที่เว็บไซต์ส่วนใหญ่ทิ้งเปิดไว้: ช่องความคิดเห็น ช่องค้นหา ปลั๊กอินที่ล้าสมัย สคริปต์ของบุคคลที่สามสำหรับโฆษณาหรือการวิเคราะห์ หรือวิดเจ็ตแชท Content Security Policy ปิดประตูนั้นโดยปฏิเสธที่จะรันอะไรก็ตามจากแหล่งที่คุณไม่ได้อนุมัติ

สิ่งนี้อาจทำให้คุณสูญเสียอะไร

นี่ไม่ใช่สิ่งที่เป็นนามธรรม การโจมตีที่ Content Security Policy ป้องกัน — โค้ดที่ฉีดเข้าในหน้าที่ขโมยข้อมูลจากลูกค้าของคุณเอง — อยู่เบื้องหลังการละเมิดการขโมยบัตรที่ใหญ่ที่สุดในบันทึก

มันคืออะไรจริงๆ (รายละเอียด)

Content Security Policy ถูกส่งเป็น HTTP response header เดียว ค่าของมันคือชุดของ directives แต่ละอย่างตั้งชื่อประเภทของเนื้อหาและแหล่งที่มาที่ได้รับอนุญาต ตัวอย่าง:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

ในคำพูดธรรมดา นั่นหมายความว่า: โดยค่าเริ่มต้นโหลดเฉพาะสิ่งต่างๆ จากเว็บไซต์ของฉันเอง รันสคริปต์จากเว็บไซต์ของฉันเอง ไม่อนุญาตปลั๊กอินเก่า และไม่ให้เว็บไซต์อื่นฝังของฉันในเฟรม

สิ่งที่ “ดี” ดูเหมือน นโยบายที่แข็งแกร่ง:

วิธีแก้ไข (ฟรี ประมาณ 1–2 ชั่วโมง)

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

  1. เริ่มในโหมด report-only — อย่าบังคับใช้ก่อน เพิ่ม header Content-Security-Policy-Report-Only สิ่งนี้เฝ้าดูและบันทึกสิ่งที่จะถูกบล็อกโดยไม่บล็อกอะไรจริงๆ (สำคัญ: report-only ด้วยตัวเองไม่ให้การป้องกันผู้เข้าชม)

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

  3. หลีกเลี่ยงช่องโหว่ที่ขัดกับจุดประสงค์ทั้งหมด หลีกเลี่ยง 'unsafe-inline' และ 'unsafe-eval' สำหรับสคริปต์ และหลีกเลี่ยงแหล่ง wildcard

  4. ล็อกการแสดงผลในเฟรมและปลั๊กอิน เพิ่ม frame-ancestors 'self' และ object-src 'none'

  5. สลับจาก report-only เป็นบังคับใช้ เมื่อรายงานสะอาดและเว็บไซต์ทำงาน เปลี่ยนชื่อ header จาก Content-Security-Policy-Report-Only เป็น Content-Security-Policy นี่คือขั้นตอนที่ให้การป้องกันจริง

    ตั้ง header:

    • Cloudflare: Rules → Transform Rules → Modify Response Header
    • Nginx: add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always;
    • Apache: Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
  6. ตรวจสอบโดเมนของคุณใหม่ ยืนยันว่านโยบายแสดงว่าเปิดและบังคับใช้ โดยไม่มีช่องโหว่ที่อ่อนแอ

ข้อผิดพลาดทั่วไป

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

ฉันไม่ใช่ช่างเทคนิค — ฉันจัดการเรื่องนี้เองได้ไหม?

คุณไม่จำเป็นต้องเข้าใจรายละเอียด นี่คือการตั้งค่าที่เพิ่มโดยใครก็ตามที่รันเว็บไซต์หรือโฮสติ้งของคุณ และบนบริการอย่าง Cloudflare มันส่วนใหญ่นำทาง ส่งส่วน 'วิธีแก้ไข' ด้านล่างให้พวกเขา มันฟรี ข้อควรระวังเดียวคือมันควรเปิดตัวอย่างระมัดระวังในโหมดทดลองการเฝ้าดูก่อนเพื่อไม่ให้บล็อกส่วนต่างๆ ของเว็บไซต์ของคุณเองโดยไม่ตั้งใจ

ฉันมีกุญแจและใบรับรอง SSL แล้ว — เว็บไซต์ของฉันไม่ปลอดภัยแล้วไหม?

กุญแจรักษาความปลอดภัยการส่งมอบหน้าของคุณ มันไม่ตรวจสอบสิ่งที่รันอยู่ในนั้น หากโค้ดที่เป็นอันตรายเคยลงบนหน้า — ผ่านปลั๊กอินที่ถูกแฮ็ก โฆษณาที่ถูกบุกรุก หรือฟิลด์ที่ถูกฉีด — กุญแจจะไม่หยุดมันจากการขโมยข้อมูล Content Security Policy คือชั้นที่จำกัดสิ่งที่ได้รับอนุญาตให้รันตั้งแต่แรก พวกมันปกป้องสิ่งต่างๆ และคุณต้องการทั้งสอง

การเปิดสิ่งนี้อาจทำให้เว็บไซต์ของฉันเสียหายไหม?

มันสามารถถ้าเปิดก้าวร้าวทั้งหมดพร้อมกัน เพราะอาจบล็อกสคริปต์ที่ถูกกฎหมายที่คุณใช้จริงๆ นั่นเป็นเหตุที่วิธีมาตรฐานคือเริ่มในโหมด 'report-only' ที่เฝ้าดูโดยไม่บล็อก แก้ไขสิ่งที่มันตั้งค่าสถานะ และเมื่อนั้นเท่านั้นจึงบังคับใช้

เราใส่มันในโหมด 'report-only' แล้ว — เราได้รับการปกป้องไหม?

ไม่ และนี่คือความรู้สึกปลอดภัยเท็จที่พบบ่อยที่สุด โหมด report-only เฝ้าดูและบันทึกสิ่งที่จะถูกบล็อก แต่บล็อกอะไรไม่ได้ — ผู้เข้าชมไม่ได้รับการป้องกันจริง มันเป็นเพียงขั้นตอนแรกที่ปลอดภัย การตรวจสอบของเราให้ report-only เพียงเศษส่วนเล็กน้อยของเครดิตของนโยบายจริงและจะไม่บันทึกว่าผ่าน

สิ่งนี้ส่งผลต่อคะแนนของเราหรือเป็นแค่คำแนะนำ?

มันส่งผลต่อคะแนนของคุณ การตรวจสอบ Content Security Policy มีคะแนนและมีค่าสูงถึง 25 คะแนนในหมวดหมู่ Web Security นโยบายที่หายไปหรืออ่อนแอถูกทำเครื่องหมายว่ามีความรุนแรงสูงและดึงเกรดของคุณลง

นักพัฒนาของเราเพิ่มนโยบายแต่คะแนนยังต่ำ — ทำไม?

นโยบายสามารถมีอยู่และยังอ่อนแอได้ ผู้กระทำผิดที่พบบ่อยที่สุดคือช่องโหว่อย่าง 'unsafe-inline' และ 'unsafe-eval' สำหรับสคริปต์ หรือแหล่งที่มา wildcard (เครื่องหมาย *) ซึ่งเปิดช่องว่างที่นโยบายควรปิดอีกครั้ง การแก้ไขคือการกระชับกฎสคริปต์โดยใช้ nonce หรือ hash แทนช่องโหว่เหล่านั้น