Mengapa iframe dianggap berbahaya dan berisiko keamanan? Dapatkah seseorang menggambarkan contoh kasus yang dapat digunakan secara jahat?
Mengapa iframe dianggap berbahaya dan berisiko keamanan? Dapatkah seseorang menggambarkan contoh kasus yang dapat digunakan secara jahat?
Jawaban:
Segera setelah Anda menampilkan konten dari domain lain, pada dasarnya Anda mempercayai domain itu untuk tidak menyajikan malware.
Tidak ada yang salah dengan iframe itu sendiri. Jika Anda mengontrol konten iframe, mereka sangat aman.
<iframe>
elemen) memiliki gaya yang sesuai dan memberi petunjuk bahwa iframe berisi konten yang tidak tepercaya, tidak ada masalah. Kerentanan nyata Modulo di browser, tentu saja. Singkatnya, sebuah <iframe>
adalah sebagai aman sebagai <a href>
.
<iframe>
dari domain yang sama dapat menyebabkan risiko keamanan jika konten di dalam iframe tersembunyi dapat dimodifikasi oleh penyerang. Itu akan memungkinkan penyerang untuk memperpanjang serangan XSS di dalam yang tersembunyi <iframe>
ke halaman mana pun di situs Anda yang merujuk ke <iframe>
konten tersebut. Lihat stackoverflow.com/a/9428051/334451 untuk detailnya.
The IFRAME
elemen dapat menjadi resiko keamanan jika situs Anda tertanam dalam sebuah IFRAME
situs bermusuhan . Google "clickjacking" untuk lebih jelasnya. Perhatikan bahwa tidak masalah jika Anda menggunakan <iframe>
atau tidak. Satu-satunya perlindungan nyata dari serangan ini adalah menambahkan header HTTP X-Frame-Options: DENY
dan berharap browser mengetahui tugasnya.
Selain itu, elemen IFRAME dapat menjadi risiko keamanan jika ada halaman di situs Anda yang memiliki kerentanan XSS yang dapat dieksploitasi . Dalam hal ini, penyerang dapat memperluas serangan XSS ke halaman mana pun dalam domain yang sama yang dapat dibujuk untuk memuat dalam <iframe>
halaman dengan kerentanan XSS. Ini karena konten dari asal yang sama (domain yang sama) diizinkan untuk mengakses DOM konten induk (secara praktis menjalankan JavaScript dalam dokumen "host"). Satu-satunya metode perlindungan nyata dari serangan ini adalah dengan menambahkan header HTTP X-Frame-Options: DENY
dan / atau selalu dengan benar menyandikan semua data yang dikirimkan pengguna (artinya, tidak pernah memiliki kerentanan XSS di situs Anda - lebih mudah diucapkan daripada dilakukan).
Itulah sisi teknis dari masalahnya. Selain itu, ada masalah antarmuka pengguna. Jika Anda mengajari pengguna Anda untuk mempercayai bahwa bilah URL seharusnya tidak berubah ketika mereka mengeklik tautan (misalnya, situs Anda menggunakan iframe besar dengan semua konten aktual), maka pengguna tidak akan melihat apa pun di masa mendatang baik dalam kasus keamanan aktual kerentanan. Misalnya, Anda mungkin memiliki kerentanan XSS dalam situs Anda yang memungkinkan penyerang memuat konten dari sumber yang tidak bersahabat dalam iframe Anda. Tidak ada yang bisa membedakannya karena bilah URL masih terlihat identik dengan perilaku sebelumnya (tidak pernah berubah) dan konten "terlihat" valid meskipun berasal dari domain bermusuhan yang meminta kredensial pengguna.
Jika seseorang mengklaim bahwa menggunakan <iframe>
elemen di situs Anda berbahaya dan menyebabkan risiko keamanan, dia tidak memahami fungsi <iframe>
elemen tersebut, atau dia berbicara tentang kemungkinan <iframe>
kerentanan terkait di browser. Keamanan <iframe src="...">
tag sama dengan <img src="..."
atau <a href="...">
selama tidak ada kerentanan di browser. Dan jika ada kerentanan yang sesuai, mungkin dapat dipicunya bahkan tanpa menggunakan <iframe>
, <img>
atau <a>
elemen, jadi tidak perlu dipertimbangkan untuk masalah ini.
Namun, berhati-hatilah karena konten dari <iframe>
dapat memulai navigasi tingkat atas secara default . Artinya, konten di dalam <iframe>
diizinkan untuk secara otomatis membuka tautan di atas lokasi halaman saat ini (lokasi baru akan terlihat di bilah alamat). Satu-satunya cara untuk menghindarinya adalah dengan menambahkan sandbox
atribut tanpa nilai allow-top-navigation
. Misalnya <iframe sandbox="allow-forms allow-scripts" ...>
,. Sayangnya, sandbox juga selalu menonaktifkan semua plugin. Misalnya, konten Youtube tidak dapat di-sandbox karena Flash player masih diperlukan untuk melihat semua konten Youtube. Tidak ada browser yang mendukung penggunaan plugin dan melarang navigasi tingkat atas pada saat yang bersamaan.
Perhatikan bahwa X-Frame-Options: DENY
juga melindungi dari serangan saluran sisi kinerja rendering yang dapat membaca konten lintas asal (juga dikenal sebagai " Pixel perfect Timing Attacks ").
"This is because content from the same origin (same domain) is allowed to access the parent content DOM (practically execute JavaScript in the "host" document)."
boleh diubah ke arah dokumen (induk) yang berisi kerentanan XSS ke dokumen (anak) di iframe?
<iframe>
di halaman, ini memungkinkan perluasan kerentanan dari konten dalam iframe ke dokumen host. Pertanyaannya adalah tentang <iframe>
menjadi berbahaya dan jika dokumen host memiliki kerentanan XSS, Anda benar-benar tidak memerlukan <iframe>
elemen tersebut.
Saya berasumsi iFrame lintas domain karena kemungkinan risikonya akan lebih rendah jika Anda mengendalikannya sendiri.
"Berbahaya" dan "Risiko keamanan" bukanlah hal pertama yang muncul dalam pikiran ketika orang menyebutkan iframe… tetapi mereka dapat digunakan dalam serangan clickjacking .
iframe juga rentan terhadap Cross Frame Scripting: