# Dokumentasi Teknis Penyamaran URL Ekstensi (URL Hiding Security)

Fitur penyamaran URL dinamis telah ditambahkan untuk menyembunyikan link tujuan ekstensi browser (seperti `https://gemini.google.com/share/...`, `https://ai.studio/...`, dll) dari pengguna akhir. Hal ini mencegah pengguna meng-copy dan mengakses link tersebut secara langsung di luar ekstensi tanpa menggunakan autentikasi terpusat.

## 1. Konfigurasi di Owner Dashboard
Pada menu **Kelola Aplikasi** (di Dashboard Owner maupun Mitra), terdapat *toggle checkbox* baru:
`🔒 Sembunyikan URL Asli (Gunakan Redirect Aman)`
- Jika dicentang (`hide_url` = `1`), URL aplikasi dan custom server URL akan otomatis dienkripsi sebelum dikirimkan ke ekstensi browser.
- Setingan ini dapat diatur spesifik untuk setiap aplikasi.

## 2. Mekanisme Enkripsi Multi-Layer
Proses enkripsi terjadi di endpoint API (`inject/index.php` pada mode API `action=validate` dan `action=get_cookies`).
- **Fungsi:** `get_url_token($app_id, $real_url)`
- **Algoritma:** AES-256-CBC melalui `openssl_encrypt`.
- **Kunci Rahasia:** Di-generate secara otomatis sebagai `url_secret_key` sepanjang 32-byte dan disimpan di `data/settings.json`.
- **Payload:** Berisi JSON dengan `id` aplikasi, `url` target, dan `ts` (timestamp).
- **Format:** `base64_encode( IV :: ENCRYPTED_PAYLOAD )`. Karakter URL-safe digunakan agar token tidak rusak di HTTP GET request.

## 3. Sistem Redirect Aman (`go.php`)
Ketika ekstensi membuka link, mereka akan diarahkan ke URL palsu dengan pola:
`https://domain.com/inject/go.php?token=...`
1. `go.php` menangkap parameter token.
2. Membaca `url_secret_key` dari pengaturan server.
3. Melakukan *Base64 Decode* dan memisahkan Initialization Vector (IV).
4. Melakukan *AES-256-CBC Decrypt*.
5. Memvalidasi payload (URL tidak kosong) dan mengecek Timestamp untuk mencegah penggunaan ulang di masa mendatang (kadaluarsa > 24 jam).
6. Menggunakan HTTP 302 untuk mengarahkan pengguna secara mulus ke URL target asli.

## 4. Sistem Logging Keamanan
Semua percobaan akses yang masuk ke `go.php` dilacak dan disimpan ke dalam file `data/url_logs.json`.
- `BLOCK_EMPTY_TOKEN`: Mencoba mengakses tanpa token.
- `BLOCK_INVALID_IV` / `BLOCK_DECRYPT_FAIL`: Percobaan injeksi token palsu atau manipulasi.
- `BLOCK_EXPIRED`: Mencoba menggunakan token yang sudah kadaluwarsa (> 24 jam).
- `REDIRECT_SUCCESS`: Log saat URL berhasil diarahkan. Data mencakup Timestamp, IP, User Agent, dan Target App ID.

## 5. Kompatibilitas Ekstensi (Cross-Browser)
Perubahan ini dilakukan sepenuhnya di level REST API dan Redirect Server. Ekstensi browser (di Chrome, Firefox, Edge, Safari, Lemur, Kiwi, Mises, dll) tidak perlu di-compile ulang atau di-update kodenya, karena ekstensi akan menganggap `go.php?token=...` sebagai link biasa yang diberikan oleh server, lalu mengeksekusi navigasi seperti biasa.

## 6. Unit Testing
Script `test_url_hiding.php` disediakan untuk memastikan mekanisme `openssl_encrypt` berjalan dengan benar di lingkungan hosting, dan untuk memastikan tidak ada celah di mana string `https://gemini.google.com/...` terlihat secara plain text.

## Kesimpulan
Sistem ini memenuhi syarat keamanan tinggi dan menyembunyikan URL target dengan baik, tetap fleksibel untuk diaktif/nonaktifkan dari dashboard owner, dan kompatibel 100% dengan infrastruktur ekstensi yang sudah ada.
