Open Redirect, Celah Kecil yang Dimanfaatkan Phisher
Open redirect membuat link domain resmimu bisa mengantar korban ke situs phishing. Kenali cara kerjanya, kenapa berbahaya, dan cara menutupnya.
Jawaban singkat
Open redirect adalah celah ketika website menerima alamat tujuan dari parameter URL lalu mengalihkan pengunjung ke sana tanpa pemeriksaan. Phisher memakainya agar link tampak berasal dari domain tepercaya. Penangkalnya: hanya izinkan path relatif atau daftar tujuan yang sudah ditentukan.
Daftar isi
Open redirect adalah celah ketika website kamu bisa disuruh mengalihkan pengunjung ke alamat mana pun, hanya dengan mengubah parameter di URL.
Kenapa ini penting? Karena link yang diawali nama domain resmimu terlihat aman di mata pelanggan, filter email, dan bahkan karyawanmu sendiri. Phisher memanfaatkan kepercayaan itu: korban melihat domain asli, mengklik, lalu sampai di halaman login palsu tanpa sadar sudah dialihkan.
Seperti apa bentuk open redirect?
Banyak website punya parameter pengalihan yang sah. Contohnya setelah login, pengguna dikembalikan ke halaman yang tadi ingin dibuka:
https://tokokamu.co.id/login?next=/akun/pesanan
Masalah muncul bila aplikasi menerima nilai next apa adanya, termasuk alamat lengkap ke domain lain. Penyerang cukup mengganti nilainya dengan alamat situs miliknya. Link yang dikirim ke korban tetap diawali tokokamu.co.id, sehingga terlihat meyakinkan.
Nama parameternya bermacam-macam: next, url, redirect, return, returnUrl, continue, dest, dan sebagainya. Celah ini tercatat di daftar kelemahan MITRE sebagai CWE-601, "URL Redirection to Untrusted Site".
Kenapa disebut celah kecil, tapi tetap berbahaya?
Open redirect tidak membocorkan data dari servermu secara langsung, sehingga sering diberi tingkat keparahan rendah dan ditunda perbaikannya. Bahayanya muncul saat dirangkai dengan serangan lain:
- Phishing yang lebih meyakinkan. Link berawalan domain resmi lebih mudah lolos dari kecurigaan korban dan dari sebagian filter tautan. Ciri phishing lain dibahas di cara mengenali phishing.
- Pencurian token OAuth. Pada alur login "Masuk dengan Google" atau sejenisnya, token dikirim ke alamat pengalihan yang terdaftar. Bila ada open redirect di domain yang terdaftar itu, token bisa diteruskan ke penyerang. RFC 6749 tentang OAuth 2.0 secara khusus memperingatkan risiko ini.
- Merusak reputasi domain. Bila domainmu sering muncul dalam kampanye phishing, layanan reputasi dan filter email bisa ikut menandainya.
Taktik phishing yang memakai alur izin aplikasi, seperti di artikel phishing lewat izin aplikasi OAuth, menunjukkan betapa seringnya penyerang menunggangi domain dan layanan yang tepercaya.
Cara menutup open redirect
Panduan OWASP tentang pengalihan yang tidak divalidasi bisa diringkas menjadi urutan pilihan berikut, dari yang paling aman:
- Hindari parameter tujuan sama sekali. Simpan halaman tujuan di sesi pengguna sebelum login, bukan di URL.
- Pakai kode, bukan alamat. Misalnya
?next=pesanan, lalu server memetakan kode itu ke path yang sudah ditentukan. - Izinkan hanya path relatif di domain sendiri. Tolak semua nilai yang bukan path internal.
- Daftar domain yang diizinkan. Bila memang perlu mengalihkan ke domain lain, misalnya subdomain milikmu sendiri, cocokkan nama host dengan daftar tetap.
- Halaman peringatan. Untuk pengalihan ke situs luar yang memang disengaja, tampilkan halaman "Kamu akan meninggalkan situs ini" yang menampilkan alamat tujuan dengan jelas.
Untuk pilihan ketiga, pengecekannya harus teliti. Contoh di PHP:
$next = $_GET['next'] ?? '/';
$aman = is_string($next)
&& str_starts_with($next, '/')
&& !str_starts_with($next, '//')
&& !str_contains($next, '\\')
&& !preg_match('/[\x00-\x1F]/', $next);
header('Location: ' . ($aman ? $next : '/'));
exit;
Kenapa // dan garis miring terbalik ikut ditolak? Browser menafsirkan alamat yang diawali // sebagai alamat ke domain lain, dan sebagian browser memperlakukan garis miring terbalik seperti garis miring biasa. Karakter kontrol ditolak agar tidak bisa disisipkan ke header.
Nilai next | Hasil pengecekan di atas |
|---|---|
/akun/pesanan | Diterima, path internal |
https://situs-lain.com | Ditolak, tidak diawali / |
//situs-lain.com | Ditolak, diawali // |
/\situs-lain.com | Ditolak, ada garis miring terbalik |
| Kosong | Dialihkan ke beranda |
Pengecekan sederhana seperti "apakah mengandung nama domainku" juga mudah diakali, karena nama domainmu bisa ditaruh di bagian lain alamat milik penyerang.
Bagaimana menemukan open redirect di websitemu?
Mulailah dengan mendata semua tempat aplikasi melakukan pengalihan: setelah login dan logout, tautan pelacakan klik di email marketing, tombol "kembali", dan endpoint pembayaran. Cari di kode sumber pemakaian fungsi pengalihan, seperti header('Location: di PHP, redirect() di framework, atau window.location di JavaScript, lalu periksa apakah nilainya berasal dari input pengguna.
Pemindai otomatis seperti OWASP ZAP juga bisa membantu menemukan parameter pengalihan yang menerima alamat luar. Untuk website berbasis CMS, pastikan inti CMS dan pluginnya selalu diperbarui, karena celah open redirect di plugin cukup sering dilaporkan.
Di sisi pemantauan, cari di access log permintaan yang parameter pengalihannya berisi http, //, atau nama domain asing. Laporan dari pelanggan tentang "email dari domain kalian" yang ternyata phishing juga bisa menjadi tanda ada open redirect yang sedang dimanfaatkan.
Bila menemukan open redirect yang sudah dimanfaatkan, perbaiki kodenya lebih dulu, lalu periksa apakah ada laporan dari pelanggan atau mitra tentang email mencurigakan dengan link ke domainmu. Beri tahu pelanggan bila perlu, terutama bila link itu mengarah ke halaman login palsu yang meniru websitemu. Untuk link pelacakan di email marketing, pastikan alat yang kamu pakai menandatangani atau mendaftarkan tujuan link, bukan menerima alamat apa pun dari URL.
Ringkasnya, perlakukan setiap parameter pengalihan sebagai input yang tidak dipercaya, sama seperti input formulir. Bila tidak perlu mengalihkan ke domain lain, tolak saja semua yang bukan path internal.
Pertanyaan yang sering diajukan
Apakah open redirect termasuk celah serius?
Sendirian, dampaknya terbatas. Namun celah ini sering dirangkai dengan phishing atau pencurian token OAuth, sehingga tetap layak segera diperbaiki, terutama di halaman login.
Apakah redirect 301 dari domain lama ke domain baru termasuk open redirect?
Tidak. Redirect yang tujuannya ditetapkan di konfigurasi server dan tidak bisa diubah pengguna adalah pengalihan biasa. Open redirect terjadi bila tujuannya diambil dari input pengguna.
Apakah cukup mengecek bahwa URL tujuan mengandung nama domain saya?
Tidak cukup. Nama domainmu bisa ditaruh sebagai subdomain atau path di alamat milik penyerang. Lebih aman hanya menerima path relatif atau mencocokkan nama host secara persis dengan daftar yang diizinkan.


