Audit keamanan source code jauh lebih mendalam daripada sekadar mencari eval(base64_decode()). Tujuannya adalah menjawab pertanyaan: "Apakah CMS ini aman dipasang di server yang terhubung ke internet?"
Untuk CMS cms-sekolahku-v3.0.1, saya biasanya melakukan audit dalam beberapa tahap.
| Tahap | Yang diperiksa | Risiko |
|---|---|---|
| 1 | Struktur proyek | File asing, backdoor |
| 2 | Konfigurasi | Password, API key, debug mode |
| 3 | Login & Session | Bypass login, session hijacking |
| 4 | SQL | SQL Injection |
| 5 | Upload file | Upload shell PHP |
| 6 | XSS | Script berbahaya |
| 7 | CSRF | Form tanpa token |
| 8 | Hak akses | Privilege escalation |
| 9 | Library pihak ketiga | Versi rentan/CVE |
| 10 | Kualitas kode | Error handling, sanitasi |
Contoh yang saya cari
1. SQL Injection
Kode yang berbahaya misalnya:
$id = $_GET['id'];
$sql = "SELECT * FROM siswa WHERE id=$id";
$db->query($sql);
Seharusnya menggunakan prepared statement atau Query Builder.
2. Upload Shell
Misalnya:
move_uploaded_file($_FILES['file']['tmp_name'],
"uploads/".$_FILES['file']['name']);
tanpa validasi.
Saya akan cek:
hanya jpg/png/pdf?
MIME type
ukuran
rename file
blokir php
simpan di luar public_html bila memungkinkan
3. XSS
Misalnya
echo $_POST['nama'];
harusnya
esc($nama)
atau
htmlspecialchars(...)
4. Login
Saya akan cek
password di-hash?
pakai bcrypt/Argon2?
session_regenerate_id()
remember me aman?
brute force protection
5. CSRF
Apakah setiap POST mempunyai token.
6. Authorization
Misalnya URL
/admin/user/delete/5
Apakah user biasa bisa membuka URL itu.
7. Debug
Misalnya
CI_ENVIRONMENT = development
di server produksi.
Atau
display_errors = On
8. Hardcoded Secret
Saya cari
password=
apikey=
secret=
Bearer
JWT
smtp
9. Library
Misalnya CodeIgniter 4.1
padahal sekarang sudah ada patch keamanan.
Saya cek:
framework
composer
vendor
CVE yang diketahui
10. Backdoor Tersembunyi
Selain
eval(base64_decode())
saya juga mencari
assert()
preg_replace('/e')
create_function()
call_user_func()
Reflection
file_get_contents("http://")
curl_exec()
exec()
shell_exec()
passthru()
proc_open()
dan memastikan penggunaannya memang sah.
Hasil akhirnya
Saya biasanya membuat laporan seperti ini:
Security Audit CMS Sekolahku
★★★★★ Critical
- Tidak ada
★★★★ High
- 1 SQL Injection pada modul Alumni
★★★ Medium
- Upload gambar belum memeriksa MIME Type
★★ Low
- Debug masih aktif
★ Info
- Framework CodeIgniter 4.5.2
- Composer dependency OK
lalu saya sertakan
lokasi file
nomor baris
penyebab
dampak
cara memperbaikinya
contoh kode yang benar.
Saran untuk CMS Sekolahku
Karena CMS ini akan dipasang pada server sekolah dan diakses dari internet, saya menyarankan audit penuh. Saya bisa memeriksa seluruh proyek (termasuk folder app, public, vendor, dan konfigurasi) dan menghasilkan laporan keamanan yang cukup lengkap, bukan hanya mencari malware. Dengan begitu kita bisa mengetahui apakah ada celah seperti SQL Injection, XSS, upload file berbahaya, atau masalah otorisasi sebelum sistem digunakan di lingkungan produksi.
0 comments:
Post a Comment