Clickjacking: X-Frame-Options และ CSP frame-ancestors
Clickjacking คืออะไร
Clickjacking คือการหลอกให้ผู้ใช้คลิกสิ่งที่มองเห็น ขณะที่หน้าเป้าหมายถูกซ้อนในเฟรมโปร่งใส OWASP อธิบายไว้ที่ Clickjacking
การป้องกันหลักคือห้ามให้หน้าอ่อนไหวถูกฝังในเฟรมของต้นทางอื่น
X-Frame-Options
กำหนดใน RFC 7034
DENYห้ามฝังทุกกรณีSAMEORIGINฝังได้เฉพาะต้นทางเดียวกันALLOW-FROMไม่เป็นที่รองรับสม่ำเสมอ หลีกเลี่ยง
code
X-Frame-Options: SAMEORIGINCSP frame-ancestors
CSP Level 3 กำหนด frame-ancestors ซึ่งระบุรายการต้นทางได้ละเอียดกว่า และในเบราว์เซอร์สมัยใหม่มีผลเหนือ X-Frame-Options เมื่อส่ง CSP นี้
code
Content-Security-Policy: frame-ancestors 'self'ถ้าต้องฝังในพาร์ทเนอร์ที่รู้จัก ให้ระบุโฮสต์นั้นชัดเจน ไม่ใช้ * กับหน้าที่มีปุ่มยืนยันธุรกรรม
หน้าใดควรเข้มงวดเป็นพิเศษ
หน้าเข้าสู่ระบบ, ชำระเงิน, เปลี่ยนอีเมล/รหัสผ่าน และแผงผู้ดูแลระบบ ควรใช้ DENY หรือ frame-ancestors 'none' หากไม่จำเป็นต้องฝังเอง
สรุป
ใช้ frame-ancestors เป็นมาตรฐานหลัก และยังส่ง X-Frame-Options ได้สำหรับไคลเอนต์เก่า อย่าพึ่ง JavaScript frame-busting เป็นชั้นเดียว