CYBER ASSET MANAGER V2 HARDENED — RED / BLACK
==============================================

FITUR UTAMA
- Login admin + logout aman
- Upload multi-image / drag & drop
- JPG, PNG, GIF, WEBP, AVIF
- Buat folder dan subfolder
- Rename file / folder
- Delete file / folder
- Preview gambar
- Copy URL gambar 1 klik
- Responsive desktop / mobile

HARDENING V2
- Data akun dipindah ke private directory di luar public_html
- First-run setup wajib memakai setup key privat
- Setup key otomatis dibuat di HOME/.cyber-asset-manager-data/setup-key.txt
- Setup key otomatis dihapus setelah akun berhasil dibuat
- Brute-force protection server-side per IP
- Default: 5 login gagal dalam 15 menit -> IP terkunci 15 menit
- Delay progresif pada login gagal
- Session cookie HttpOnly + SameSite=Strict + Secure saat HTTPS
- PHP session strict mode + session ID rotation
- Logout otomatis setelah 30 menit idle
- Batas absolut session 8 jam
- User-Agent binding untuk mengurangi risiko session theft
- Logout hanya lewat POST + CSRF
- Semua action perubahan memakai POST + CSRF
- HTTPS dipaksa secara default
- HSTS aktif saat HTTPS
- CSP, no-cache, anti-frame, no-sniff, noindex security headers
- MIME validation via fileinfo
- getimagesize validation
- Batas resolusi dan megapixel gambar untuk mengurangi image-bomb risk
- Extension upload ditentukan server dari MIME, bukan nama file user
- Directory traversal protection
- Symlink target tidak diproses
- Item sistem seperti .htaccess tidak boleh rename/delete dari panel
- Folder asset memblokir script / HTML / SVG via .htaccess
- Directory listing dan CGI execution dimatikan

STRUKTUR SETELAH INSTALL
public_html/
├── asset-manager/
│   ├── index.php
│   ├── config.php
│   ├── functions.php
│   ├── .htaccess
│   └── data/
│       └── .htaccess
└── assets/
    └── images/
        └── .htaccess

PRIVATE DATA (dibuat otomatis, BUKAN di public_html):
/home/USERNAME/.cyber-asset-manager-data/
├── credentials.php
├── setup-key.txt        (hanya sebelum setup selesai)
└── login-<hash>.json    (rate-limit login)

INSTALL BARU DI CPANEL
1. cPanel > File Manager > public_html.
2. Upload ZIP ini lalu Extract.
3. Jika hasil extract masuk folder cyber-asset-manager-v2-hardened-cpanel,
   pindahkan ISI folder tersebut ke public_html.
4. Pastikan struktur akhirnya:
   public_html/asset-manager/index.php
   public_html/assets/images/.htaccess
5. Buka https://domainkamu.com/asset-manager/
6. Saat FIRST RUN SETUP muncul, panel akan meminta Setup Key.
7. Di cPanel File Manager:
   - masuk folder HOME (satu level di atas public_html)
   - Settings > aktifkan "Show Hidden Files (dotfiles)"
   - buka .cyber-asset-manager-data/setup-key.txt
   - copy key dan masukkan ke form setup
8. Buat username + password minimal 12 karakter.
9. Setelah setup sukses, setup-key.txt dihapus otomatis.

UPGRADE DARI V1
- Backup dulu folder asset-manager dan assets/images.
- Replace file asset-manager/index.php, config.php, functions.php, .htaccess.
- Replace assets/images/.htaccess.
- Saat V2 pertama kali berjalan, akun lama di:
  public_html/asset-manager/data/credentials.php
  akan dipindahkan otomatis ke private data directory dan file lama dihapus.
- Gambar lama di assets/images tidak diubah.

PERMISSION YANG DISARANKAN
- folder public: 755
- file PHP: 644
- assets/images: 755 atau 775 jika hosting memerlukannya
- private data directory dibuat otomatis 700 jika server mengizinkan
- credentials / rate files dibuat 600 jika server mengizinkan

JANGAN memakai 777 kecuali benar-benar diperlukan dan memahami risikonya.

CONFIG PENTING
Edit asset-manager/config.php.

A. Base URL
Sangat disarankan isi domain final agar Copy URL tidak bergantung host request:
'base_url' => 'https://domain.com',

B. Website di subfolder
Misal: https://domain.com/project/
'upload_url_path' => '/project/assets/images',

C. Force HTTPS
Default:
'force_https' => true,
Jika website belum memiliki SSL, pasang SSL dulu. Menonaktifkan ini mengurangi keamanan.

D. Limit upload
'max_file_size' => 10 * 1024 * 1024,
'max_files_per_upload' => 20,
'max_image_width' => 12000,
'max_image_height' => 12000,
'max_image_pixels' => 50000000,

E. Cloudflare dan IP rate-limit
Default memakai REMOTE_ADDR, paling aman dari spoofing.
Jika server/origin BENAR-BENAR hanya dapat diakses melalui Cloudflare, bisa ubah:
'trusted_client_ip_header' => 'HTTP_CF_CONNECTING_IP',
JANGAN aktifkan ini bila origin masih dapat diakses langsung karena header tersebut dapat dipalsukan oleh client langsung.

CATATAN
- PHP 7.4+ disarankan.
- Extension fileinfo harus aktif.
- HTTPS sangat disarankan dan default V2 memaksanya.
- .htaccess memerlukan Apache/LiteSpeed yang mendukung aturan tersebut. Pada Nginx, aturan server harus dikonfigurasi terpisah; validasi PHP tetap mencegah upload script melalui panel.
- AVIF membutuhkan dukungan image info pada build PHP/server agar lolos validasi.

RESET ADMIN
Karena credentials sekarang berada di luar public_html:
1. cPanel File Manager > HOME
2. aktifkan Show Hidden Files
3. buka .cyber-asset-manager-data
4. hapus credentials.php
5. buka /asset-manager/ lagi
6. setup-key.txt akan dibuat otomatis; gunakan key itu untuk setup ulang

KEAMANAN TAMBAHAN YANG SANGAT DISARANKAN
- Gunakan password unik minimal 16 karakter.
- Aktifkan 2FA pada akun cPanel.
- Gunakan Cloudflare/WAF atau Basic Auth tambahan untuk /asset-manager/ jika tersedia.
- Jangan share URL panel admin secara publik.
- Backup assets/images secara rutin.
- Update PHP dan cPanel/LiteSpeed/Apache secara berkala.
