Mitigasi clickjacking dengan XFO atau CSP

Clickjacking adalah serangan berbahaya yang menyebabkan pengguna tertipu sehingga mengklik link atau elemen UI di situs yang tampak seperti situs tepercaya dan sudah dikenal. Hal ini biasanya dilakukan dengan menyematkan sebagian atau seluruh situs tepercaya ke dalam situs berbahaya menggunakan <iframe>.

Header X-Frame-Options (XFO) dan perintah frame-ancestors di header Content-Security-Policy (CSP) dapat mengurangi serangan clickjacking dengan mengontrol cara situs disematkan dalam <iframe>.

Cara audit Lighthouse gagal

Audit akan lulus jika header XFO ditetapkan dengan SAMEORIGIN atau DENY, atau perintah frame-ancestors ditetapkan di header CSP. Audit akan gagal jika tidak satu pun kebijakan kontrol frame ini dikonfigurasi.

Laporan Lighthouse memperingatkan bahwa tidak ada header respons CSP atau XFO yang ditemukan untuk memitigasi clickjacking.
Laporan Lighthouse memperingatkan bahwa tidak ada header respons CSP atau XFO yang ditemukan untuk mengurangi clickjacking.

Cara menetapkan kebijakan kontrol frame untuk mengurangi clickjacking

Kebijakan kontrol frame perlu ditetapkan pada header HTTP permintaan dokumen awal. Header X-Frame-Options dan perintah frame-ancestors di Content-Security-Policy tidak akan berfungsi jika ditetapkan pada elemen <meta>.

Header XFO

Menetapkan DENY atau SAMEORIGIN untuk header XFO akan mengurangi serangan clickjacking:

X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY

Perintah SAMEORIGIN mengizinkan halaman ditampilkan hanya jika semua frame ancestor memiliki origin yang sama dengan halaman itu sendiri. Sebaliknya, perintah DENY mencegah halaman ditampilkan dalam frame, terlepas dari asal frame induk.

Header CSP

Perintah frame-ancestors dalam header CSP menentukan situs yang dapat menyematkan halaman tertentu di <frame>, <iframe>, <object>, atau <embed>. Serupa dengan XFO, perintah frame-ancestors CSP dapat digunakan untuk mengurangi serangan clickjacking dengan menyetelnya ke self atau none:

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

Namun, perintah frame-ancestors lebih fleksibel daripada XFO karena dapat menetapkan sumber induk tertentu yang dapat menyematkan halaman:

Content-Security-Policy: frame-ancestors 'self' https://example.com;

Resource