# Model Keamanan AwanDrive

## Kontrol yang diterapkan

### Penyimpanan file

File disimpan di luar document root. Nama fisik dibuat secara acak. Isi file dienkripsi secara streaming dengan XChaCha20-Poly1305. File hanya didekripsi melalui endpoint yang melakukan pemeriksaan otorisasi.

### Upload

Aplikasi memeriksa status upload PHP, ukuran, nama, ekstensi, dan MIME dari `finfo`. Ekstensi executable, HTML, SVG, JavaScript, dan server-side script diblokir. ZIP diperiksa untuk path traversal, file executable, jumlah entri, ukuran hasil ekstraksi, dan rasio kompresi ekstrem.

### Autentikasi

Password di-hash dengan Argon2id ketika tersedia. Login dibatasi berdasarkan fingerprint email dan alamat IP. Session ID dirotasi. Cookie menggunakan `Secure`, `HttpOnly`, dan `SameSite=Strict`. TOTP tersedia sebagai faktor kedua.

### Otorisasi

Setiap operasi file dan folder mencocokkan `user_id` milik sesi. Tautan berbagi memakai token acak yang hanya disimpan sebagai hash SHA-256. Tautan dapat memiliki password, kedaluwarsa, dan batas unduhan.

### Aplikasi web

Semua query dinamis memakai PDO prepared statements. Semua form perubahan data memakai token CSRF. Output HTML di-escape. Header CSP, HSTS, clickjacking protection, MIME sniffing protection, referrer policy, dan permissions policy diterapkan.

### Audit

Login, kegagalan login, upload, download, share, perubahan MFA, administrasi pengguna, dan penghapusan dicatat. IP dan user agent disimpan sebagai HMAC, bukan plaintext.

## Ancaman yang belum sepenuhnya ditangani

- Malware di dalam dokumen yang sah memerlukan antivirus server.
- Kompromi akun cPanel dapat mengekspos kode, database, dan master key.
- Shared hosting dapat memiliki kelemahan isolasi yang berada di luar aplikasi.
- Denial of service skala besar memerlukan proteksi edge atau provider.
- Master key berada pada filesystem. KMS atau HSM memerlukan infrastruktur di luar shared cPanel.
- Aplikasi belum menyediakan sinkronisasi desktop, versioning file, collaborative editing, preview dokumen, atau replikasi multi-region.

## Respons insiden minimum

1. Nonaktifkan domain atau aktifkan maintenance.
2. Putuskan sesi dengan mengganti nama session dan merotasi kredensial.
3. Ganti password database, cPanel, email admin, dan semua akun admin.
4. Simpan bukti log sebelum melakukan pembersihan.
5. Periksa integritas kode dan file konfigurasi.
6. Pulihkan dari backup bersih.
7. Rotasi `app.key` hanya melalui proses re-enkripsi semua file. Mengganti key langsung akan membuat file lama tidak dapat dibaca.
8. Lakukan analisis akar masalah dan penetration test sebelum membuka layanan kembali.
