Pemeriksa iframe

Alat pengecek iframe online gratis: masukkan URL halaman web mana saja untuk memeriksa header X-Frame-Options dan Content-Security-Policy frame-ancestors-nya, ketahui apakah halaman tersebut dapat disematkan dalam iframe, dan konfirmasi dengan pratinjau langsung. Riwayat disimpan hanya untuk sesi browser saat ini.

Pemeriksaan semat IFrame

:

Menjalankan setiap baris melalui pemeriksaan header yang sama dan menambahkannya ke riwayat sesi di bawah. Dibatasi hingga 20 URL per batch, diperiksa beberapa per kali agar tidak memberatkan situs tujuan.

Telah diperiksa: /
URL Hasil HTTP

Pratinjau langsung

Inspeksi header adalah tahap awal yang cepat, tetapi tidak dapat mendeteksi mekanisme frame-busting JavaScript: jika header menunjukkan "Dapat Disematkan" namun pratinjau tetap kosong, keluar dari bingkai, atau menampilkan halaman error, halaman tersebut tidak aman untuk disematkan. Pratinjau langsung merupakan penentuan akhir.

Riwayat (sesi ini)

Disimpan hanya di tab ini (sessionStorage); dihapus saat Anda menutup tab. Tidak ada data yang dikirim ke server.

Belum ada pemeriksaan pada sesi ini.

Cara pemeriksaan bekerja

  1. Masukkan URL tujuan dan klik Periksa. Server mengambil halaman sebagai permintaan iframe sungguhan (dengan Sec-Fetch-Dest: iframe) dan membaca header responsnya.
  2. Keputusan didasarkan pada X-Frame-Options (DENY / SAMEORIGIN memblokir penayangan dalam bingkai) dan Content-Security-Policy frame-ancestors (hanya tanda * atau wildcard skema yang memperbolehkan sumber pihak ketiga secara bebas).
  3. URL yang sama dimuat dalam iframe pratinjau langsung agar Anda dapat mengonfirmasi apa yang sebenarnya dilakukan peramban, termasuk mekanisme frame-busting JavaScript yang tidak terdeteksi oleh header.

Apa yang menentukan apakah sebuah halaman dapat disematkan?

Kemampuan sebuah halaman web ditampilkan di dalam <iframe> pada situs lain diputuskan oleh peramban, berdasarkan header respons yang dikirim oleh halaman tersebut. Pengecek ini melakukan inspeksi serupa di sisi server dan memberikan simpulan segera kepada Anda.

X-Frame-Options adalah header klasik: DENY melarang penyematan di halaman mana pun, SAMEORIGIN hanya mengizinkan halaman dari sumber asal yang sama untuk menyematkannya, dan ALLOW-FROM telah dihapus dari peramban modern. Jika header ini tidak ada, aturan lama tidak akan memblokir penyematan.

Content-Security-Policy frame-ancestors adalah pengantinya yang modern. Header ini mencantumkan sumber yang diizinkan untuk menyematkan halaman — misalnya frame-ancestors 'self' https://example.com. Nilai * (atau skema dasar seperti https:) mengizinkan semua sumber induk HTTPS apa pun; batasan yang lebih ketat akan memblokir penyematan pihak ketiga.

Informasi dari header saja tidak menggambarkan situasi sepenuhnya: skrip halaman dapat menjalankan kode pembatas bingkai (membandingkan top !== self dan memaksa navigasi tingkat atas), dan halaman login atau titik akses yang dibatasi wilayah mungkin merespons berbeda terhadap permintaan dari datacenter. Itulah mengapa setiap hasil pemeriksaan selalu dipasangkan dengan pratinjau langsung.

Panduan cepat: penyiapan header respons

Jika Anda pemilik situs, kendalikan pengaturan penyematan secara langsung melalui header respons.

Blokir penyematan dari halaman mana pun

X-Frame-Options: DENY Content-Security-Policy: frame-ancestors 'none'

Peramban akan menolak menampilkan halaman di dalam iframe apa pun — perlindungan serangan klikjakling paling ketat.

Izinkan penyematan hanya dari sumber yang sama

X-Frame-Options: SAMEORIGIN Content-Security-Policy: frame-ancestors 'self'

Hanya halaman dengan skema, host, dan port yang sama yang dapat menyematkannya; situs pihak ketiga akan diblokir.

Izinkan penyematan hanya dari sumber tertentu

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

Masukkan sumber tepercaya pada frame-ancestors; sumber yang tidak terdaftar akan diblokir.

Izinkan penyematan dari halaman mana pun

Jangan atur X-Frame-Options Content-Security-Policy: frame-ancestors *

Situs apa pun dapat menyematkan halaman ini di dalam iframe. Evaluasi risiko keamanan yang mungkin timbul.

Catatan: X-Frame-Options telah digantikan oleh CSP frame-ancestors. Jika keduanya ada, aturan CSP yang berlaku — disarankan menggunakan frame-ancestors.

Bagaimana server mendeteksi bahwa permintaan berasal dari iframe?

Sejak sekitar tahun 2020, peramban berbasis Chromium dan Firefox secara otomatis menyertakan seperangkat header permintaan Metadata Pengambilan (Fetch Metadata) ke setiap permintaan navigasi dan sumber daya. Yang paling berguna untuk pengecekan pembingkai adalah Sec-Fetch-Dest — ia memberi tahu server konteks apa yang meminta sumber daya tersebut, tanpa memerlukan kerja sama dari halaman yang mengirim permintaan.

  • Sec-Fetch-Dest: document — navigasi tingkat atas, tidak berada di dalam bingkai apa pun.
  • Sec-Fetch-Dest: iframe — permintaan dimuat di dalam elemen <iframe>.
  • Sec-Fetch-Dest: frame — dimuat di dalam <frame> (kerangka kerja lama).
  • Sec-Fetch-Dest: embed/object — dimuat di dalam elemen <embed> atau <object>.

Checker ini mengirimkan probe-nya sendiri dengan nilai Sec-Fetch-Dest: iframe, meniru persis apa yang dikirim oleh browser asli saat menyematkan halaman—sehingga kesimpulan yang dihasilkan mencerminkan bagaimana server tujuan sebenarnya merespons permintaan iframe yang sah, bukan sekadar panggilan fetch biasa.

Sec-Fetch-Dest merupakan indikator yang berguna, namun bukan sebagai batasan keamanan: header ini hanya dikirim oleh browser modern, sedangkan klien non-browser—seperti curl, bot, sebagian webview, dan browser lama—bisa mengabaikannya sepenuhnya atau mengirim nilai acak. Server dapat memanfaatkan data ini untuk pencatatan (logging) atau pembatasan frekuensi (rate-limiting), tetapi tidak boleh mengandalkan header ini secara mandiri untuk menentukan keamanan framing. Penilaian keamanan framing tetap menjadi ranah X-Frame-Options dan CSP frame-ancestors, yang diterapkan oleh browser secara independen terlepas dari header permintaan apa pun.

Di sisi klien, halaman juga dapat mendeteksi bahwa dirinya berjalan di dalam frame tanpa bergantung pada header mana pun, misalnya dengan membandingkan window.top !== window.self (atau membaca window.frameElement untuk frame same-origin), lalu bertindak—menampilkan peringatan atau memaksa pengalihan ke jendela utama (top-level redirect). Inilah teknik frame-busting yang telah dibahas sebelumnya, dan metode ini efektif apa pun isi header permintaannya.

Contoh konfigurasi server: blokir semat iframe

Cuplikan kode di bawah ini menunjukkan cara mengonfigurasi server atau framework agar memblokir penyematan iframe sepenuhnya (X-Frame-Options: DENY + CSP frame-ancestors 'none') — pilihan paling ketat dari panduan cepat di atas.

server {
    location / {
        add_header X-Frame-Options "DENY" always;
        add_header Content-Security-Policy "frame-ancestors 'none'" always;
    }
}
<IfModule mod_headers.c>
    Header always set X-Frame-Options "DENY"
    Header always set Content-Security-Policy "frame-ancestors 'none'"
</IfModule>
app.use((req, res, next) => {
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('Content-Security-Policy', "frame-ancestors 'none'");
  next();
});
// next.config.js
module.exports = {
  async headers() {
    return [
      {
        source: '/:path*',
        headers: [
          { key: 'X-Frame-Options', value: 'DENY' },
          { key: 'Content-Security-Policy', value: "frame-ancestors 'none'" },
        ],
      },
    ];
  },
};
class SetFrameOptions
{
    public function handle(Request $request, Closure $next): Response
    {
        $response = $next($request);
        $response->headers->set('X-Frame-Options', 'DENY');
        $response->headers->set('Content-Security-Policy', "frame-ancestors 'none'");

        return $response;
    }
}
export default {
  async fetch(request) {
    const response = await fetch(request);
    const headers = new Headers(response.headers);
    headers.set('X-Frame-Options', 'DENY');
    headers.set('Content-Security-Policy', "frame-ancestors 'none'");
    return new Response(response.body, { status: response.status, headers });
  },
};

Hanya perlu mengizinkan situs Anda sendiri, atau daftar putih pendek, untuk menyematkan halaman alih-alih memblokir semuanya? Ganti DENY dengan SAMEORIGIN, dan 'none' dengan 'self' atau daftar sumber secara eksplisit — sisa konfigurasi tetap sama.

Hal-hal yang perlu diwaspadai dari berbagai platform

Selain aturan header umum, beberapa platform populer memiliki karakteristik unik masing-masing—informasi ini penting diketahui sebelum Anda menyimpulkan status "terblokir" atau "dapat disematkan" hanya berdasarkan header.

Platform / skenario Respons Penjelasan
Halaman tontonan YouTube (youtube.com/watch) Terblokir Gunakan URL pemutar resmi youtube.com/embed/{id} sebagai gantinya—halaman nonton standar menerapkan kebijakan framing yang ketat.
Halaman lokasi Google Maps Terblokir Hanya URL iframe API Sematkan Maps (google.com/maps/embed) yang dirancang untuk disematkan.
Halaman masuk OAuth Google / Microsoft Terblokir Diblokir secara sengaja sejak tahun 2015 untuk mencegah praktik phishing kredensial di dalam iframe; proses masuk harus dijalankan pada jendela utama atau jendela pop-up.
Halaman pembayaran (Stripe Checkout, PayPal, sebagian besar gerbang perbankan) Terblokir Menyematkan formulir pembayaran merupakan vektor serangan clickjacking klasik, sehingga pihak prosesor pembayaran menolak hal tersebut sama sekali.
Halaman repositori / berkas GitHub Terblokir Mengatur frame-ancestors 'none' secara global; gunakan API REST/GraphQL atau tangkapan layar sebagai alternatif daripada iframe.
Halaman "Terbitkan ke Web" Notion / Google Docs Dapat Disematkan Dirancang secara eksplisit untuk tujuan penyematan, serta menyediakan kode sematan (embed code) siap pakai.
Artikel Wikipedia Dapat Disematkan Secara bawaan tidak membatasi X-Frame-Options atau CSP, namun pastikan untuk memeriksa ketentuan lisensi dan hak atribusi sebelum melaksanakan penyematan dalam skala besar.

Skenario penggunaan umum

  • Tentukan terlebih dahulu apakah widget pihak ketiga, dasbor, atau dokumen tertentu dapat disematkan ke dalam produk Anda sebelum mulai menulis kode integrasi.
  • Verifikasi bahwa situs Anda benar-benar mengirimkan kebijakan X-Frame-Options atau CSP frame-ancestors sesuai dengan yang Anda tetapkan.
  • Debug konfigurasi proteksi clickjacking: pahami mengapa halaman menampilkan about:blank atau pesan penolakan saat ditampilkan di dalam iframe.
  • Lakukan penyaringan batch pada kandidat URL selama agregasi konten atau integrasi portal, dengan memanfaatkan riwayat sesi untuk meninjau ulang hasil.
  • Persiapkan diri untuk tinjauan keamanan atau uji penetrasi dengan mendokumentasikan kebijakan framing pada dependensi eksternal.

Pertanyaan Umum (FAQ)

Mengapa halaman yang dilaporkan sebagai "Dapat Disematkan" tetap kosong saat dipreview?
Header respons mengizinkan pembingkaian, namun halaman tersebut kemungkinan memiliki kode JavaScript frame-busting, mewajibkan login atau cookie, atau menyajikan konten berbeda tergantung pengunjung. Percayai informasi pada pratinjau.
Dapatkah saya melewati batasan X-Frame-Options atau CSP?
Tidak. Header ini diterapkan oleh browser demi keamanan (perlindungan clickjacking); solusi workaround di sisi klien tidak dapat diandalkan. Untuk menyematkan konten yang tidak Anda kendalikan, mintalah pemilik situs menambahkan origin Anda ke allowlist pada frame-ancestors, atau gunakan solusi embed/API resmi yang mereka tawarkan.
Apa perbedaan antara DENY dan SAMEORIGIN?
DENY mencegah halaman ditampilkan di semua iframe, termasuk halaman dengan sumber sama; SAMEORIGIN hanya mengizinkan pembingkaian oleh halaman yang berasal dari skema, host, dan port yang sama.
Apakah alat pengecek menyimpan URL saya?
Riwayat hanya tersimpan di tab browser Anda melalui sessionStorage dan akan hilang saat tab ditutup. Server pengecekan hanya mengambil URL yang diminta untuk membaca header responsnya.
Mengapa satu URL yang sama memberikan hasil berbeda pada waktu yang berbeda?
Situs dapat mengirimkan header yang berbeda tergantung path, setelah terjadi redirect, berdasarkan User-Agent, atau menyesuaikan eksperimen A/B serta aturan WAF. Jalankan kembali pengecekan untuk melihat kondisi terkini.