Cara Mencegah Open Redirect Vulnerability pada Aplikasi Web

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

  1. Inventarisasi Parameter: Identifikasi semua parameter di aplikasi web yang menangani fungsi pengalihan, seperti ?redirect=, ?return_to=, atau ?url=.
  2. Terapkan Validasi Ketat: Jangan pernah mempercayai input dari pengguna. Lakukan pengecekan apakah URL tujuan bersifat absolut atau relatif.
  3. 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.