Lewati ke konten utama
Didit Raih $7,5 Juta untuk Membangun Infrastruktur Identitas dan Fraud
Didit
Kembali ke blog
Blog · 14 Maret 2026

Keamanan iFrame Tersemat: Praktik Terbaik untuk Pengembang Web (ID)

iFrame adalah alat yang ampuh untuk menyematkan konten, tetapi juga menimbulkan risiko keamanan yang signifikan jika tidak ditangani dengan benar.

Oleh DiditDiperbarui
embedded-iframe-security-best-practices.png

Sandbox iFrame AndaSelalu gunakan atribut sandbox untuk membatasi kemampuan iFrame, mencegah konten yang tidak tepercaya mengeksekusi skrip, mengakses penyimpanan lokal, atau mengirimkan formulir.

Terapkan CSP yang KuatManfaatkan header Content Security Policy (CSP) untuk mengontrol sumber daya mana yang dapat dimuat dan dieksekusi oleh halaman Anda, secara khusus menargetkan iFrame untuk mencegah masalah mixed content dan injeksi skrip.

Manfaatkan X-Frame-Options & CSP Frame-AncestorsLindungi situs Anda dari clickjacking dengan mengatur X-Frame-Options ke DENY atau SAMEORIGIN, dan untuk browser modern, gunakan direktif frame-ancestors yang lebih granular di CSP Anda.

Berhati-hatilah dengan Konten EksternalPeriksa secara menyeluruh setiap konten pihak ketiga yang disematkan melalui iFrame, karena Anda secara implisit memercayai praktik keamanan mereka. Pilihlah solusi yang menawarkan jaminan keamanan yang kuat atau memungkinkan pemrosesan sisi server.

Pedang Bermata Dua iFrame: Kenyamanan vs. Keamanan

iFrame (Inline Frames) adalah bagian integral dari pengembangan web modern, memungkinkan pengembang untuk menyematkan konten dari sumber lain ke halaman web mereka dengan mulus. Baik itu video YouTube, gateway pembayaran, widget media sosial, atau alur verifikasi identitas, iFrame menawarkan fleksibilitas yang tak tertandingi. Namun, kekuatan ini datang dengan peringatan keamanan yang signifikan. Tanpa tindakan pencegahan yang tepat, iFrame dapat menjadi vektor untuk berbagai serangan, termasuk clickjacking, cross-site scripting (XSS), dan kebocoran data. Seiring dengan semakin kompleks dan terhubungnya aplikasi web, memahami dan menerapkan praktik terbaik keamanan iFrame bukan lagi pilihan; ini adalah suatu keharusan.

Tantangan inti dengan iFrame terletak pada fakta bahwa Anda pada dasarnya mengizinkan konten eksternal untuk berjalan dalam konteks halaman Anda sendiri. Konten eksternal ini mungkin tidak mematuhi standar keamanan yang sama dengan aplikasi Anda, atau bahkan bisa berbahaya. Oleh karena itu, tujuan keamanan iFrame adalah untuk mengisolasi konten yang disematkan ini sebanyak mungkin, membatasi potensinya untuk berinteraksi dengan atau mengkompromikan dokumen induk dan data pengguna Anda.

Tindakan Keamanan iFrame Esensial: Sandboxing dan CSP

1. Atribut sandbox: Garis Pertahanan Pertama Anda

Atribut sandbox HTML5 bisa dibilang fitur keamanan paling penting untuk iFrame. Ini memungkinkan Anda untuk menerapkan serangkaian batasan yang ketat pada konten di dalam iFrame, mengisolasinya dari sisa halaman Anda. Secara default, hanya dengan menyertakan atribut sandbox tanpa nilai apa pun akan menerapkan batasan paling ketat, pada dasarnya memperlakukan konten iFrame seolah-olah berasal dari sumber yang unik dan mencegah skrip berjalan, formulir dikirim, dan akses ke penyimpanan lokal.

Meskipun sangat aman, sandbox default mungkin terlalu ketat untuk banyak kasus penggunaan. Anda dapat secara selektif mencabut batasan dengan memberikan kata kunci tertentu sebagai nilai untuk atribut sandbox:

  • allow-forms: Memungkinkan pengiriman formulir.
  • allow-modals: Memungkinkan iFrame untuk membuka jendela modal (seperti alert(), confirm(), prompt()).
  • allow-popups: Memungkinkan pop-up (misalnya, window.open()).
  • allow-popups-to-escape-sandbox: Memungkinkan dokumen yang di-sandbox untuk membuka jendela baru tanpa mewarisi batasan sandbox.
  • allow-pointer-lock: Memungkinkan API kunci penunjuk.
  • allow-same-origin: Memungkinkan konten iFrame diperlakukan sebagai berasal dari asal yang sama dengan dokumen induk, yang seringkali diperlukan agar konten yang disematkan berfungsi dengan benar (misalnya, mengakses cookie, penyimpanan lokal). Gunakan dengan sangat hati-hati.
  • allow-scripts: Memungkinkan eksekusi JavaScript. Ini adalah izin yang kuat dan hanya boleh diberikan kepada sumber tepercaya.
  • allow-top-navigation: Memungkinkan iFrame untuk menavigasi konteks penjelajahan tingkat atas (yaitu, mengubah URL jendela induk).

Praktik Terbaik: Selalu gunakan atribut sandbox. Mulailah dengan default (tanpa nilai) dan hanya tambahkan izin minimum yang diperlukan. Misalnya, jika Anda menyematkan formulir pembayaran, Anda mungkin memerlukan allow-forms allow-scripts, tetapi Anda pasti tidak ingin allow-same-origin kecuali jika benar-benar diperlukan dan telah diperiksa secara menyeluruh.

<iframe src="https://trusted-payment-gateway.com/form" sandbox="allow-forms allow-scripts"></iframe>

2. Content Security Policy (CSP): Mengontrol Pemuatan Konten

Content Security Policy (CSP) adalah mekanisme keamanan yang kuat yang membantu mengurangi berbagai jenis serangan, termasuk XSS dan injeksi data. Dengan mendefinisikan CSP melalui header HTTP (Content-Security-Policy) atau tag <meta>, Anda dapat menentukan sumber konten mana yang diizinkan untuk dimuat dan dieksekusi oleh browser.

Untuk keamanan iFrame, CSP sangat penting dalam dua cara utama:

  • Melindungi Induk dari iFrame: CSP yang kuat pada halaman induk Anda dapat mencegah iFrame yang dieksploitasi memuat skrip atau konten berbahaya ke dalam aplikasi utama Anda.
  • Melindungi iFrame dari Induk (dan sebaliknya): Direktif frame-src secara khusus mengontrol sumber yang valid untuk iFrame. Direktif frame-ancestors menentukan asal mana yang diizinkan untuk menyematkan sumber daya saat ini (halaman Anda) dalam iFrame, mencegah clickjacking.

Contoh Header CSP:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com; frame-src 'self' https://trusted-iframe-source.com; frame-ancestors 'self';

CSP ini hanya mengizinkan skrip dari asal Anda sendiri dan trusted-cdn.com, dan mengizinkan iFrame hanya dari asal Anda sendiri dan trusted-iframe-source.com. Yang terpenting, frame-ancestors 'self' memastikan halaman Anda hanya dapat disematkan oleh dirinya sendiri, secara efektif mencegah clickjacking.

Melindungi dari Clickjacking: X-Frame-Options dan frame-ancestors

Clickjacking (UI redressing) adalah serangan di mana situs web berbahaya melapisi iFrame transparan situs Anda di atas situs mereka sendiri, menipu pengguna agar mengklik elemen situs Anda sambil berpikir mereka berinteraksi dengan situs berbahaya. Ini dapat menyebabkan tindakan yang tidak sah, seperti melakukan pembelian, mengubah pengaturan, atau mengungkapkan informasi sensitif.

1. Header HTTP X-Frame-Options

Header HTTP X-Frame-Options adalah cara tradisional untuk mencegah clickjacking. Ini memberi tahu browser apakah sebuah halaman dapat dirender dalam <frame>, <iframe>, <embed>, atau <object>.

  • X-Frame-Options: DENY: Halaman tidak dapat ditampilkan dalam bingkai, terlepas dari situs yang mencoba melakukannya. Ini adalah opsi yang paling aman.
  • X-Frame-Options: SAMEORIGIN: Halaman hanya dapat ditampilkan dalam bingkai pada asal yang sama dengan halaman itu sendiri.

Praktik Terbaik: Kecuali jika Anda secara eksplisit membutuhkan halaman Anda untuk disematkan oleh situs lain (dan jika demikian, gunakan frame-ancestors dengan hati-hati), atur X-Frame-Options: DENY untuk semua halaman yang menangani tindakan pengguna yang sensitif.

2. Direktif frame-ancestors CSP

Direktif frame-ancestors dalam Content Security Policy adalah alternatif yang lebih modern dan fleksibel untuk X-Frame-Options. Ini memungkinkan Anda untuk menentukan beberapa asal yang diizinkan untuk menyematkan konten Anda.

Contoh:

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

Ini memungkinkan halaman Anda untuk disematkan oleh dirinya sendiri dan oleh partner-site.com. Jika kedua X-Frame-Options dan frame-ancestors ada, frame-ancestors umumnya akan didahulukan di browser modern. Merupakan praktik yang baik untuk menggunakan keduanya untuk kompatibilitas browser yang lebih luas.

Penanganan dan Komunikasi Data yang Bertanggung Jawab

Ketika iFrame perlu berkomunikasi dengan jendela induknya (atau sebaliknya), akses JavaScript langsung biasanya diblokir oleh Same-Origin Policy. Metode aman yang direkomendasikan untuk komunikasi lintas asal adalah window.postMessage().

Menggunakan window.postMessage() dengan Aman

window.postMessage() memungkinkan jendela untuk berkomunikasi dengan aman satu sama lain di berbagai asal. Namun, sangat penting untuk menggunakannya dengan benar untuk menghindari kerentanan.

  • Selalu verifikasi asal pengirim: Saat menerima pesan, selalu periksa properti event.origin untuk memastikan pesan berasal dari sumber yang diharapkan.
  • Tentukan asal target: Saat mengirim pesan, berikan asal target yang tepat (misalnya, iframeWindow.postMessage('hello', 'https://expected-origin.com');) alih-alih '*'. Menggunakan '*' berarti jendela apa pun berpotensi menerima pesan Anda, yang merupakan risiko keamanan.
  • Bersihkan data yang diterima: Perlakukan setiap data yang diterima melalui postMessage() sebagai input yang tidak tepercaya dan bersihkan sebelum digunakan untuk mencegah XSS.

Contoh (Induk mengirim ke iFrame):

const iframe = document.getElementById('myIframe');
iframe.contentWindow.postMessage('Hello from parent!', 'https://trusted-iframe-source.com');

Contoh (iFrame menerima dari induk):

window.addEventListener('message', (event) => {
  if (event.origin !== 'https://parent-domain.com') {
    // Pesan tidak dari asal yang diharapkan, abaikan atau log.
    return;
  }
  console.log('Pesan dari induk:', event.data);
  // Proses data, tetapi bersihkan terlebih dahulu!
});

Bagaimana Didit Membantu dengan Alur Kerja yang Dapat Disematkan dengan Aman

Didit, sebagai platform identitas all-in-one, sering menggunakan komponen yang dapat disematkan untuk alur verifikasi identitasnya. Pendekatan kami dibangun dengan keamanan sebagai intinya, memahami kebutuhan kritis untuk iFrame dan isolasi alur kerja yang kuat. Didit menyediakan tautan verifikasi yang dihosting dengan aman dan Web SDK yang dirancang untuk berintegrasi dengan mulus sambil mematuhi standar keamanan tertinggi.

  • Tautan Verifikasi yang Dihosting: Didit menghasilkan URL yang aman dan unik untuk setiap sesi verifikasi. Tautan ini mengarahkan pengguna ke lingkungan terisolasi yang dihosting Didit, sepenuhnya memisahkan proses verifikasi yang sensitif dari domain aplikasi Anda. Ini menghilangkan kebutuhan untuk sandboxing iFrame yang kompleks di pihak Anda untuk verifikasi inti.
  • Web SDK dengan Isolasi Kuat: Untuk skenario yang membutuhkan penyematan dalam konteks, Web SDK Didit dirancang untuk beroperasi dalam iFrame yang aman, memanfaatkan atribut sandbox yang paling ketat yang diperlukan. Kami mengelola seluk-beluk komunikasi lintas asal yang aman menggunakan postMessage(), memastikan bahwa hanya data yang diperlukan dan dibersihkan yang dipertukarkan antara iFrame dan aplikasi Anda.
  • Kepatuhan dan Sertifikasi: Didit bersertifikat SOC 2 Tipe II dan ISO 27001, dan sesuai GDPR. Infrastruktur dan proses kami dibangun untuk menangani data identitas sensitif dengan aman, mengurangi beban kepatuhan dan risiko Anda.
  • Paparan Data Minimal: Arsitektur Didit adalah privasi-by-design. Untuk verifikasi biometrik, swafoto diproses dalam memori dan dihapus, dan aplikasi Anda menerima boolean (misalnya, 'terverifikasi'), bukan data biometrik mentah. Ini meminimalkan informasi sensitif yang ditangani dalam komponen yang dapat disematkan.

Dengan menggunakan solusi yang dapat disematkan yang aman dan sudah dibuat Didit, bisnis dapat mengintegrasikan verifikasi identitas tingkat lanjut tanpa harus menjadi ahli dalam keamanan iFrame, memungkinkan mereka untuk fokus pada produk inti mereka sambil memastikan kepercayaan pengguna dan perlindungan data.

Siap untuk Memulai?

Mengamankan iFrame Anda adalah langkah penting dalam membangun aplikasi web yang tangguh dan dapat dipercaya. Dengan menerapkan sandboxing, CSP, X-Frame-Options, dan praktik postMessage() yang aman secara cermat, Anda dapat memanfaatkan kekuatan konten yang disematkan tanpa mengekspos pengguna atau aplikasi Anda ke risiko yang tidak perlu. Jelajahi solusi verifikasi identitas aman Didit untuk melihat betapa mudahnya mengintegrasikan keamanan yang kuat ke dalam alur kerja Anda.

Lihat Harga Didit | Jelajahi Dokumentasi Didit | Coba Demo

Infrastruktur untuk identitas dan fraud.

Satu API untuk KYC, KYB, Transaction Monitoring, dan Wallet Screening. Integrasi dalam 5 menit.

Minta AI untuk merangkum halaman ini
Keamanan iFrame Tersemat: Praktik Terbaik untuk Pengembang.