Menyematkan konten dengan aman di situs Anda

Jack J
Jack J
Alexandra White
Alexandra White

Konten sematan adalah cara terbaik agar pengguna tetap berada di situs Anda, sekaligus berbagi konten dari halaman atau situs lain. Ukurannya bisa sekecil Tweet yang disematkan, yang ditampilkan dalam gaya dan format Twitter. Situs ini bisa sebesar situs yang sepenuhnya terpisah dan disematkan ke situs Anda sendiri, seperti toko Shopify tersemat tempat pengunjung dapat melakukan pembelian tanpa meninggalkan situs Anda.

Sekarang, situs kami harus tetap aman saat kami menyematkan konten.

Ada beberapa cara yang dapat digunakan developer untuk menyematkan konten di situs. Teknik yang paling umum adalah menggunakan <iframe>, yang memungkinkan Anda menyematkan konten apa pun ke situs hanya dengan URL. Anda sudah dapat menambahkan atribut sandbox untuk membuat iframe lebih aman.

Atau, Anda dapat menggunakan elemen HTML yang diusulkan:

  • <fencedframe> diusulkan sebagai cara yang menjaga privasi untuk menyematkan konten pihak ketiga.
  • <portal> diusulkan untuk transisi halaman yang lebih lancar.

Lanjutkan membaca untuk mempelajari cara meningkatkan keamanan konten Anda yang disematkan.

Menyematkan dengan iframe

Iframe dapat digunakan untuk semua jenis kasus penggunaan, seperti menambahkan peta atau formulir ke halaman kontak, dan menampilkan iklan.

<iframe src="https://example.com/maps"></iframe>

Setiap iframe memiliki konteks penjelajahannya sendiri, dengan histori sesi dan dokumennya sendiri. Konteks yang menyematkan iframe disebut sebagai konteks penjelajahan parent.

Konten pihak ketiga yang ditampilkan dalam iframe dapat berinteraksi dengan situs induk melalui postMessage(). Hal ini memungkinkan developer mengirim nilai arbitrer antar-konteks penjelajahan. Penerima pesan dapat menggunakan pemroses peristiwa onmessage untuk menerima nilai tersebut.

// inside iframe
window.parent.postMessage("ping", "https://example.com");

// window
window.addEventListener("message", (event) => {
  console.log(event.data);
})

Keamanan yang ditambahkan dengan atribut sandbox

Jika konten berbahaya di-deploy di iframe, ada kemungkinan tindakan yang tidak diinginkan (seperti eksekusi JavaScript atau pengiriman formulir) dapat dilakukan. Untuk menghindari hal ini, atribut sandbox membatasi API yang dapat dieksekusi di iframe dan menonaktifkan fitur yang berpotensi berbahaya.

<iframe src="https://example.com" sandbox></iframe>

Sandbox mungkin membuat API tertentu tidak tersedia yang penting untuk konten yang disematkan. Untuk mengizinkan API yang dinonaktifkan, Anda dapat secara eksplisit menambahkan argumen ke atribut sandbox.

<iframe sandbox="allow-forms" src="https://example.com"></iframe>

Ada sejumlah kemungkinan nilai untuk spesifikasi sandbox, termasuk allow-forms, allow-same-origin, allow-popups, dan lainnya.

Kebijakan Izin

Seiring berkembangnya fitur-fitur yang semakin canggih untuk web, kebijakan izin dibuat untuk mengelola izin bagi semua fitur tersebut. Kebijakan izin dapat diterapkan ke situs induk dan konten iframe. Izin yang diberikan ke situs induk juga dapat diberikan ke iframe, menggunakan atribut allow.

<iframe src="https://example.com" allow="fullscreen"></iframe>

Sematkan dengan frame dengan fence

Frame dengan fence (<fencedframe>) adalah elemen HTML yang diusulkan untuk konten sematan, mirip dengan iframe. Tidak seperti iframe, frame dengan fence membatasi komunikasi dengan konteks embeddingnya, untuk memungkinkan akses frame ke data lintas situs tanpa membagikannya dengan konteks embedding. Demikian pula, data pihak pertama di halaman induk tidak dapat dibagikan ke frame dengan fence.

<fencedframe src="https://3rd.party.example"></fencedframe>

Frame dengan Fence adalah proposal Privacy Sandbox yang menyarankan agar situs tingkat atas harus mempartisi data. Banyak proposal Privacy Sandbox bertujuan untuk memenuhi kasus penggunaan lintas situs, tanpa cookie pihak ketiga atau mekanisme pelacakan lainnya. Privacy Sandbox API tertentu mungkin memerlukan dokumen tertentu untuk dirender dalam frame fence.

Misalnya, frame dengan fence akan dibuat untuk pemenang lelang iklan FLEDGE API. FLEDGE API akan menyediakan sumber buram, skema URN yang tidak bergantung lokasi, yang dapat dirender dalam frame dengan fence. Sumber yang tidak transparan memungkinkan situs menampilkan konten di situs mereka tanpa mengungkapkan URL sumber iklan kepada pemilik situs.

<fencedframe src="urn:uuid:c36973b5-e5d9-de59-e4c4-364f137b3c7a"></fencedframe>

Pada akhirnya, bingkai dengan fence tidak akan menggantikan iframe. Anda tidak perlu menggunakannya. Frame dengan fence diusulkan untuk frame yang lebih pribadi untuk digunakan saat data dari partisi tingkat atas yang berbeda perlu ditampilkan di halaman yang sama.

Sematkan dengan portal

Portal (<portal>) adalah elemen HTML yang diusulkan dengan konteks penjelajahan independen, yang dapat meningkatkan pengalaman transisi halaman. Portal menyematkan konten seperti iframe, tetapi pengguna tidak dapat mengakses kode portal. Portal bersifat hanya lihat dan tidak dapat berinteraksi dengan pengguna.

Portal menawarkan kompleksitas rendah pada aplikasi multi-halaman dengan transisi yang mulus pada aplikasi web satu halaman. Transisi ini dapat dianimasikan untuk mengganti konten di jendela browser dengan cepat.

<portal src="https://example.com/"></portal>

Spesifikasi portal masih dalam tahap pengembangan awal.

Elemen HTML lain yang digunakan untuk sematan

Sepanjang riwayat web, ada sejumlah elemen HTML yang diusulkan dan API yang dibuat untuk menyematkan konten. Untuk sementara waktu, membuat situs dengan beberapa elemen <frame> dan <frameset> adalah hal yang umum. Situs dengan beberapa elemen <frameset> menampilkan URL halaman induk di kolom URL, terlepas dari sumber masing-masing frame. Hal ini menyulitkan berbagi link ke konten dalam situs. API ini sudah tidak digunakan lagi.

Ada waktu ketika teknologi plugin, seperti elemen <applet> Java, digunakan untuk mencakup kasus penggunaan lainnya. Elemen ini kemudian diganti dengan elemen <object>. Kedua elemen ini biasanya digunakan untuk menampilkan plugin Flash, tetapi juga digunakan untuk menampilkan elemen HTML lainnya (serupa dengan iframe). Elemen lain, seperti <canvas>, <audio>, <video>, dan <svg>, telah merender elemen <object> dan <applet> yang sudah tidak digunakan lagi.

Meskipun <object> dan <embed> belum digunakan secara resmi, sebaiknya hindari, terutama karena keduanya memiliki perilaku yang aneh. <applet> dihapus dari spesifikasi HTML pada 2017.

Kesimpulan

Anda dapat menyematkan konten dengan aman ke situs apa pun, menggunakan spesifikasi iframe yang ada. Elemen HTML lainnya, termasuk <fencedframe> dan <portal> telah diusulkan untuk peningkatan keamanan dan gaya. Kami akan terus membagikan progres proposal Frame dengan Fence seiring prosesnya berlangsung.

Banner besar oleh Jackson So.