Defaults.Exposed

Defaults.Exposedการแก้ไข › การป้องกัน Clickjacking (X-Frame-Options)

วิธีแก้ไข การป้องกัน Clickjacking (X-Frame-Options)

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

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

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

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

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

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

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

การป้องกัน Clickjacking คือคำสั่งสั้น มองไม่เห็นที่เว็บไซต์ของคุณส่งไปยังเบราว์เซอร์ของทุกผู้เข้าชมที่กล่าวว่า:

“อย่าให้เว็บไซต์อื่นโหลดฉันภายในพวกมัน ถ้ามีคนพยายาม ปฏิเสธ”

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

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

  1. “ยืนยัน” ที่มองไม่เห็น ลูกค้าเข้าสู่ระบบพอร์ทัลบัญชีของคุณในแท็บหนึ่ง พวกมันลงจอดบนหน้า (จากโฆษณา อีเมล ผลการค้นหา) ที่สัญญาสิ่งล่อใจและแสดงปุ่ม “ดำเนินการต่อ” ขนาดใหญ่ ซ่อนอยู่ใต้ปุ่มนั้นคือการควบคุม “ยืนยันการโอน” หรือ “เปลี่ยนอีเมล” จริงของคุณ โหลดจากเซสชันที่เข้าสู่ระบบของตัวเอง พวกมันคลิก “ดำเนินการต่อ” — และอนุมัติการเปลี่ยนแปลงบนบัญชีจริงกับคุณโดยไม่รู้ตัว

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

  3. ดีลที่หยุด ลูกค้ารายใหญ่ส่งแบบสอบถามความปลอดภัยมาตรฐานก่อนลงนาม บรรทัดหนึ่งถามว่าเว็บไซต์ของคุณตั้งการป้องกันการแสดงผลในเฟรม (X-Frame-Options / CSP frame-ancestors) คนติดต่อ IT ของคุณต้องตอบว่า “ไม่” และการจัดซื้อหยุดในขณะที่คุณรีบแก้ไขการตั้งค่าฟรี 15 นาทีที่ตอนนี้ดูเหมือนธงแดงในหน้าผู้ซื้อ

  4. แคมเปญ brand-as-bait เพราะหน้าจริงที่เชื่อถือได้ของคุณสามารถฝังได้ ผู้โจมตีใช้การเข้าสู่ระบบหรือการชำระเงินของคุณเป็นชั้นที่น่าเชื่อถือในแคมเปญ phishing ที่กว้างขวาง ลูกค้าที่ถูกจับไม่โทษผู้โจมตีที่ลี้ลับ — พวกมันจำมันว่าเป็นครั้งที่ “เว็บไซต์” ของคุณปล่อยให้พวกมันถูกหลอก

  5. ธงการตรวจสอบ การสแกนของผู้ประกันภัย หรือผู้ตรวจสอบที่ตรวจสอบสถานะความปลอดภัยของคุณ แสดงรายการการป้องกัน clickjacking ที่หายไปในผลลัพธ์

มันคืออะไรจริงๆ

มีสอง header และการตรวจสอบของเราผ่านถ้าอย่างใดอย่างหนึ่งมีอยู่:

1. Header เก่า — X-Frame-Options:

X-Frame-Options: SAMEORIGIN

ใช้ค่าใดค่าหนึ่งในสองค่าในทางปฏิบัติ:

2. Header สมัยใหม่ — Content-Security-Policy frame-ancestors:

Content-Security-Policy: frame-ancestors 'self';

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

สิ่งที่ “ดี” ดูเหมือน

การตั้งค่าที่แข็งแกร่งที่สุดใช้ทั้งสอง: frame-ancestors สำหรับเบราว์เซอร์สมัยใหม่และ X-Frame-Options: SAMEORIGIN เป็นทางสำรองสำหรับไคลเอ็นต์เก่า

รายละเอียดสำคัญ: header Content-Security-Policy-Report-Only ไม่บังคับใช้อะไร — มันเพียงรายงาน

วิธีแก้ไข (ฟรี ประมาณ 15 นาที)

ส่งส่วนนี้ให้ใครก็ตามที่รันเว็บไซต์ของคุณ — การแก้ไขฟรี มันเป็น response header หนึ่งหรือสอง หรือกฎใน CDN ของคุณ ไม่มีอะไรต้องซื้อ

การตรวจสอบผ่านเมื่อทั้ง header X-Frame-Options (ตั้งเป็น DENY หรือ SAMEORIGIN) หรือ directive CSP frame-ancestors มีอยู่

ขั้นตอนที่ 1 — ตัดสินใจว่าจะเข้มงวดแค่ไหน

ขั้นตอนที่ 2 — เพิ่ม header (เลือกแพลตฟอร์มของคุณ)

Nginx — ภายใน server block:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self';" always;

Apache:

Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self';"

Microsoft IIS — ใน web.config:

<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self';" />

Cloudflare: Rules → Transform Rules → Modify Response Header

Already sending a Content-Security-Policy? อย่าสร้าง header CSP ที่สอง — เพิ่ม frame-ancestors เข้าไปในนโยบายที่มีอยู่ของคุณ

ขั้นตอนที่ 3 — โหลดใหม่และยืนยัน

โหลดเว็บเซิร์ฟเวอร์ใหม่หรือปรับใช้กฎ CDN จากนั้นโหลดเว็บไซต์จริงของคุณและตรวจสอบ response header — browser dev tools → Network tab → click the page request → Response Headers

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

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

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

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

สิ่งนี้จะหยุดเว็บไซต์ของฉันเอง หรือพันธมิตรที่ถูกกฎหมาย จากการแสดงหน้าของฉันไหม?

เฉพาะถ้าคุณตั้งมันเข้มงวดเกินไป การตั้งค่าทั่วไป ('SAMEORIGIN' หรือ 'frame-ancestors self') ยังคงอนุญาตให้เว็บไซต์ของคุณเองฝังหน้าของตัวเองตามปกติ — มันเพียงบล็อกเว็บไซต์ภายนอก หากพันธมิตรที่แท้จริงต้องฝังหน้าเฉพาะของคุณ นักพัฒนาของคุณสามารถอนุญาตแหล่งที่มาเดียวนั้นในขณะที่ยังบล็อกทุกคนอื่น

เราเป็นธุรกิจขนาดเล็ก — ใครจะสนมุ่งเป้าหมายเราจริงๆ ไหม?

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

สิ่งที่ 'ดี' ดูเหมือนอะไรจริงๆ?

ทั้ง header X-Frame-Options ตั้งเป็น SAMEORIGIN (หรือ DENY) หรือ Content-Security-Policy ที่มี directive frame-ancestors — ควรเป็นทั้งสอง การตรวจสอบของเราผ่านถ้าอย่างใดอย่างหนึ่งมีอยู่ การควบคุมสมัยใหม่ที่ยืดหยุ่นกว่าคือ frame-ancestors; X-Frame-Options คือ header เก่าที่ยังครอบคลุมเบราว์เซอร์เก่า ดังนั้นการตั้งค่าแบบ belt-and-braces ใช้ทั้งสอง

นี่ไม่ใช่เหมือนกับ SSL padlock หรือ HTTPS ไหม?

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

ถ้าเราไม่แก้ไข มันจะลดเกรดของเราไหม?

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