Open Redirect Vulnerability adalah celah keamanan yang memungkinkan penyerang mengarahkan pengguna aplikasi web ke situs eksternal berbahaya melalui manipulasi parameter URL. Celah ini sering dimanfaatkan dalam serangan phishing untuk mengecoh korban agar percaya bahwa mereka masih berada di dalam domain yang sah.
Pencegahan utama kerentanan ini melibatkan implementasi validasi input yang ketat pada parameter pengalihan (redirect), penggunaan daftar putih (whitelist) untuk domain tujuan yang diizinkan, serta menghindari penggunaan input pengguna secara langsung tanpa pembersihan (sanitization).
Metode Pencegahan Open Redirect Vulnerability
Berikut adalah tabel perbandingan metode teknis yang dapat diterapkan oleh tim pengembang untuk menutup celah open redirect pada sistem:
| Metode Pencegahan | Tingkat Keamanan | Kelebihan | Kekurangan |
|---|---|---|---|
| Whitelist Domain | Sangat Tinggi | Hanya mengizinkan domain internal atau mitra yang sudah terdaftar secara eksplisit. | Membutuhkan pembaruan berkala jika ada penambahan domain mitra. |
| Relative Path Only | Tinggi | Memaksa pengalihan hanya terjadi di dalam domain yang sama (path relatif). | Tidak mendukung pengalihan lintas domain (cross-domain) yang sah. |
| Indirection Map (Token) | Sangat Tinggi | Menggunakan token acak di sisi server yang dipetakan ke URL tujuan yang aman. | Memerlukan penyimpanan tambahan di database atau cache server. |
Contoh Implementasi Kode Pencegahan
Berikut adalah contoh implementasi pencegahan menggunakan validasi path relatif dan whitelist domain pada bahasa pemrograman PHP:
<?php
// Contoh 1: Hanya mengizinkan relative path
function safe_redirect_relative($url) {
// Memastikan URL dimulai dengan '/' dan bukan '//'
if (strpos($url, '/') === 0 && strpos($url, '//') !== 0) {
header('Location: ' . $url);
exit;
}
// Fallback ke halaman utama jika tidak valid
header('Location: /index.php');
exit;
}
// Contoh 2: Menggunakan Whitelist Domain
function safe_redirect_whitelist($url) {
$allowed_domains = ['example.com', 'sub.example.com'];
$parsed_url = parse_url($url);
// Jika URL memiliki host, pastikan ada di dalam whitelist
if (isset($parsed_url['host'])) {
if (in_array($parsed_url['host'], $allowed_domains)) {
header('Location: ' . $url);
exit;
}
} else {
// Tangani relative path
if (strpos($url, '/') === 0 && strpos($url, '//') !== 0) {
header('Location: ' . $url);
exit;
}
}
// Default aman
header('Location: /dashboard');
exit;
}
?>
Langkah-Langkah Mitigasi di Lapangan
- Inventarisasi Parameter: Identifikasi semua parameter di aplikasi web yang menangani fungsi pengalihan, seperti
?redirect=,?return_to=, atau?url=. - Terapkan Validasi Ketat: Jangan pernah mempercayai input dari pengguna. Lakukan pengecekan apakah URL tujuan bersifat absolut atau relatif.
- Gunakan Pesan Peringatan: Jika aplikasi tetap harus mengarahkan pengguna ke situs eksternal, tampilkan halaman perantara (interstitial page) yang memberi tahu pengguna bahwa mereka akan meninggalkan situs utama.