pasax-secure-monitorReferensi REST API·5 min baca
Endpoint Administrator REST API
Seluruh endpoint pada dokumen ini dilindungi oleh middleware ganda: auth (pengguna harus login) dan pasax.admin (EnsureSecurityAdmin).
Seluruh endpoint pada dokumen ini dilindungi oleh middleware ganda: auth (pengguna harus login) dan pasax.admin (EnsureSecurityAdmin).
1. Log Keamanan (Security Logs)#
A. Ambil Daftar Log Keamanan (Index & Statistik)#
Mengambil data log terpaginasi lengkap dengan rincian statistik, level breakdown, top attacker, dan tren ancaman.
- Metode:
GET - URI:
/api/pasax/logs - Query Parameters:
page(int): Nomor halaman (default: 1).per_page(int): Jumlah per halaman (default: 25, maks: 100).search(string): Cari berdasarkan IP, path, evidence, rule label, atau user agent.level(string): Filter tingkat ancaman (low,medium,high,critical).event_type(string): Filter jenis event (threat_detected,blocked_attempt, dll).was_blocked(bool): Filter apakah request berujung blokir (trueataufalse).range(string): Rentang agregasi grafik tren (week,month,year).
Contoh Respons Berhasil (HTTP 200):#
{
"success": true,
"data": {
"current_page": 1,
"data": [
{
"id": 142,
"event_type": "threat_detected",
"threat_level": "critical",
"rule_id": "ssti",
"rule_label": "Percobaan Server-Side Template Injection (SSTI)",
"ip_address": "198.51.100.77",
"device_id": "dev-01",
"method": "GET",
"path": "/search",
"query_string": "q=%7B%7B7*7%7D%7D",
"evidence": "q={{7*7}}",
"was_blocked": true,
"action_taken": "instant_block",
"created_at": "2026-10-02T00:25:00.000000Z"
}
],
"total": 142
},
"stats": {
"total_threats": 142,
"blocked_threats": 89,
"critical_threats": 34
},
"level_breakdown": {
"critical": 34,
"high": 45,
"medium": 50,
"low": 13
},
"top_attackers": [
{ "ip_address": "198.51.100.77", "hits": 24 }
],
"trend": [
{ "date": "2026-09-25", "count": 12 },
{ "date": "2026-09-26", "count": 19 }
]
}
B. Bersihkan Seluruh Log (Clear All Logs)#
- Metode:
DELETE - URI:
/api/pasax/logs/clear
2. Pengelolaan Karantina IP (Blocked IPs)#
A. Ambil Daftar IP yang Diblokir#
- Metode:
GET - URI:
/api/pasax/blocked-ips - Query Parameters:
search(string): Cari IP, device ID, catatan, atau alasan.status(string):active,expired, ataupermanent.per_page(int): Jumlah per halaman (maks: 100).
B. Blokir IP / Perangkat Baru Secara Manual#
- Metode:
POST - URI:
/api/pasax/blocked-ips - Body JSON:
{ "ip_address": "203.0.113.50", "device_id": "device-uuid-optional", "local_ip": "192.168.1.55", "block_scope": "ip", "reason": "Scanning celah direktori admin berulang kali", "notes": "Tiket insiden #SEC-8812", "duration_hours": 48, "is_permanent": false } - Validasi Khusus:
- Tidak dapat memblokir IP sendiri (
resolveClientIp). - Tidak dapat memblokir IP yang berada dalam whitelist.
- Tidak dapat memblokir IP sendiri (
C. Detail Blokir IP Beserta Log Terkait#
- Metode:
GET - URI:
/api/pasax/blocked-ips/{id} - Mengembalikan entri
BlockedIpbeserta 20 entriSecurityLogterakhir dari IP tersebut.
D. Beralih Status Aktif/Nonaktif (Toggle)#
- Metode:
PATCH - URI:
/api/pasax/blocked-ips/{id}/toggle
E. Hapus Blokir (Unblock)#
- Metode:
DELETE - URI:
/api/pasax/blocked-ips/{id}
3. Daftar Izin IP (Allowed IPs)#
Allowlist global yang dikelola admin: IP, wildcard (192.168.1.*), atau CIDR (10.0.0.0/8) yang terdaftar tidak pernah dicatat maupun diblokir — di atas whitelist config dan trusted IP per pengguna.
A. Ambil Daftar Izin#
- Metode:
GET - URI:
/api/pasax/allowed-ips - Query Parameters:
search(string): Cari IP, label, atau catatan.status(string):active,expired, ataupermanent.per_page(int): Jumlah per halaman (maks: 100).
B. Tambah Izin Baru#
- Metode:
POST - URI:
/api/pasax/allowed-ips - Body JSON:
{ "ip_address": "10.20.0.0/16", "label": "Jaringan kantor cabang", "notes": "Tiket insiden #SEC-8812", "duration_hours": 0, "is_permanent": true } - Validasi Khusus:
- Menerima IP tunggal, wildcard (
192.168.1.*), atau CIDR (10.0.0.0/8); format lain ditolak (422). - Duplikat pola yang sama diperbarui (idempoten), bukan digandakan.
- Menerima IP tunggal, wildcard (
C. Detail Entri Izin#
- Metode:
GET - URI:
/api/pasax/allowed-ips/{id}
D. Beralih Status Aktif/Nonaktif (Toggle)#
- Metode:
PATCH - URI:
/api/pasax/allowed-ips/{id}/toggle
E. Hapus Entri Izin#
- Metode:
DELETE - URI:
/api/pasax/allowed-ips/{id}
4. Audit Server & Baseline Integritas#
A. Ambil Laporan Audit Server#
- Metode:
GET - URI:
/api/pasax/server?refresh=true - Informasi yang Dikembalikan:
environment: StatusAPP_DEBUG, HTTPS enforcement, session secure cookie, disk free space %.integrity: Laporan baseline SHA-256 (berkas dimodifikasi, hilang, atau baru).suspicious_files: Daftar berkas berbahaya (webshell, skrip PHP di folder public/storage).scheduler: Status heartbeat cron Laravel.lockouts: Daftar akun yang sedang terkunci akibat kegagalan login.
B. Buat Baseline Integritas Baru (SHA-256)#
- Metode:
POST - URI:
/api/pasax/server/baseline
C. Hapus Baseline Integritas#
- Metode:
DELETE - URI:
/api/pasax/server/baseline
D. Hapus Berkas Mencurigakan (Safe Deletion)#
- Metode:
DELETE - URI:
/api/pasax/server/suspicious-files - Body JSON:
{ "file_path": "public/uploads/shell.php" } - Proteksi: Menolak path traversal (
..), menolak penghapusan berkas di luarbase_path(), dan melindungi berkas vital (public/index.php,.env, dll).
E. Lepaskan Lockout Login Pengguna#
- Metode:
DELETE - URI:
/api/pasax/lockouts/{id}
5. Sesi Pengguna & IP Terpercaya (User Sessions)#
A. Daftar Sesi Pengguna & Online Count#
- Metode:
GET - URI:
/api/pasax/user-sessions - Mengembalikan riwayat login pengguna (
logins), daftartrusted_ips, dan jumlah pengguna aktif saat ini (online_count).
B. Pemantauan Realtime Pengguna Aktif#
- Metode:
GET - URI:
/api/pasax/user-sessions/realtime
C. Putus Paksa Sesi Pengguna (Force Logout)#
- Metode:
DELETE - URI:
/api/pasax/user-sessions/session/{sessionId}
D. Hapus IP Terpercaya#
- Metode:
DELETE - URI:
/api/pasax/trusted-ips/{id}
6. Manajemen Tiket Banding (Appeal Tickets)#
A. Daftar Tiket Banding#
- Metode:
GET - URI:
/api/pasax/unblock-tickets?status=pending
B. Tanggapi Tiket (Approve / Reject)#
- Metode:
POST - URI:
/api/pasax/unblock-tickets/{id}/respond - Body JSON:
{ "action": "approve", "admin_notes": "Blokir dibuka setelah validasi identitas via saluran bantuan resmi." } - Aksi Otomatis: Jika
actionadalahapprove, sistem langsung memanggilunblockIp()untuk membuka karantina pada IP/perangkat terkait.
C. Hapus Arsip Tiket#
- Metode:
DELETE - URI:
/api/pasax/unblock-tickets/{id}