Judol & Webshell Detector
WordPress security plugin untuk mendeteksi konten judi online (judol) dan webshell dengan notifikasi Telegram real-time.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/aryoksss/wpdetector/archive/refs/heads/main.zipPlugin keamanan WordPress untuk mendeteksi konten judi online (judol) dan webshell (termasuk yang di-obfuscate/encode) dengan notifikasi Telegram real-time.
Jika kamu butuh detail teknis scoring, heuristic indicator, atau algoritma deteksi, lihat TECHNICAL.md.
Daftar Isi
- Apa Yang Bisa Dideteksi
- Kebutuhan Sistem
- Instalasi
- Setup Telegram Bot
- Konfigurasi Plugin
- Menjalankan Scan
- Membaca Hasil Scan
- Auto-Scan Terjadwal
- Melihat Log
- Menangani False Positive
- Uninstall
- Troubleshooting
- FAQ
Apa Yang Bisa Dideteksi
- Konten judi online di posts, pages, dan comments — menggunakan weighted tier scoring supaya artikel berita yang kebetulan ada kata
scatter/jackpot/bonustidak dibilang judol. - Webshell signature known seperti WSO, c99, r57, FilesMan, IndoXploit, b374k — pola klasik yang langsung eksekusi perintah dari input user.
- Webshell yang di-obfuscate / encode — misal
eval(base64_decode(...)),chr(101).chr(118).chr(97).chr(108), payload tersembunyi di string panjang base64 + gzinflate. Plugin otomatis mencoba decode satu layer dan scan ulang isinya. - File PHP mencurigakan di uploads/ — folder uploads seharusnya tidak pernah berisi file PHP; kalau ada dan mengandung judol keyword = kemungkinan besar doorway/spam injection.
Kebutuhan Sistem
| Requirement | Minimal | Recommended |
|---|---|---|
| WordPress | 5.0 | 6.x terbaru |
| PHP | 7.4 | 8.1+ |
| PHP extensions | — | tokenizer (built-in), zlib (built-in) — keduanya biasanya sudah ada |
| Telegram Bot | Opsional | Recommended untuk alert real-time |
| Akses Admin WP | manage_options (role Administrator) |
— |
Instalasi
Cara 1 — Upload ZIP dari Admin (paling mudah)
- Download
judol-webshell-detector.zipdari halaman Releases. - Login ke WordPress admin, buka Plugins → Add New → Upload Plugin.
- Klik Choose File, pilih
judol-webshell-detector.zip, klik Install Now. - Setelah upload selesai, klik Activate Plugin.
- Menu Security Scanner akan muncul di sidebar admin.
Cara 2 — Clone dari GitHub
Ideal untuk dev/staging atau kalau mau modify signature:
cd wp-content/plugins/
git clone https://github.com/Aryoksss/WPDetector.git judol-webshell-detector
Lalu activate via Plugins → Installed Plugins → Judol & Webshell Detector → Activate.
Cara 3 — FTP/SFTP Manual
- Download + extract ZIP.
- Upload folder
judol-webshell-detector/kewp-content/plugins/server kamu. - Login WP admin → Plugins → activate.
Verifikasi Instalasi Berhasil
Setelah activate, kamu akan lihat:
- Menu baru Security Scanner (icon shield) di admin sidebar
- Sub-menu: Settings, Scanner, Logs
- Folder baru
wp-content/plugins/judol-webshell-detector/logs/(otomatis dibuat, sudah diproteksi.htaccess)
Setup Telegram Bot
Telegram opsional, tapi highly recommended karena kamu dapat alert real-time tanpa perlu login ke WP.
1. Buat Bot Baru
- Buka Telegram, cari kontak @BotFather
- Kirim perintah
/newbot - Ikuti pertanyaan:
- Nama bot: bebas (misal
My Site Security Bot) - Username bot: harus unik + diakhiri
bot(misalmysite_security_bot)
- Nama bot: bebas (misal
- BotFather akan reply dengan Bot Token, formatnya seperti:
123456789:ABCdefGHIjklMNOpqrSTUvwxYZ-a1b2c3d4e5fSimpan token ini baik-baik — siapa saja yang pegang bisa pakai bot kamu.
2. Ambil Chat ID
Chat ID bisa personal (alert ke DM kamu) atau group (alert ke team).
Opsi A — Personal chat:
- Cari bot yang baru kamu buat di Telegram (
@mysite_security_bot) - Klik Start lalu kirim pesan apa saja (misal "hi")
- Buka di browser:
https://api.telegram.org/bot<TOKEN>/getUpdates(ganti<TOKEN>dengan bot token kamu) - Cari bagian
"chat":{"id":...}. Angkanya = Chat ID (positif untuk personal, negatif untuk group).
Opsi B — Group chat:
- Add bot sebagai member di group
- Kirim pesan di group yang men-mention bot (misal
@mysite_security_bot test) - Buka URL
getUpdatesdi atas → cari chat id (biasanya angka negatif panjang, contoh-1001234567890)
Konfigurasi Plugin
-
Buka Security Scanner → Settings
-
Isi:
- Bot Token → paste token dari @BotFather
- Chat ID → paste chat id yang kamu dapat
-
Klik Test Connection
- Hasil sukses: kamu akan terima pesan
✅ Test connection successful from https://yoursite.comdi Telegram - Hasil gagal: cek Bot Token + Chat ID, pastikan kamu sudah kirim pesan minimal 1x ke bot
- Hasil sukses: kamu akan terima pesan
-
(Opsional) Atur Auto Scan:
- Enable Auto Scan → centang
- Scan Interval → angka + unit (menit/jam). Minimum 1 menit, rekomendasi 1–6 jam.
-
Klik Save All Settings.
Tip: Untuk site kecil, 6 jam sekali sudah cukup. Site yang sering update konten atau pernah kena hack sebelumnya, pertimbangkan 1 jam. Hindari interval <15 menit di shared hosting karena cron bisa berat.
Menjalankan Scan
Manual Scan
- Buka Security Scanner → Scanner
- Klik tombol Start Scan Now
- Tunggu proses selesai (biasanya 10–60 detik untuk site standar; site besar bisa 2–5 menit)
- Hasil langsung tampil di halaman
- Jika Telegram sudah di-setup, alert juga dikirim otomatis
Auto Scan Terjadwal
Setelah aktif di Settings, plugin akan scan otomatis via WP-Cron sesuai interval yang kamu set. Hasil masuk ke log + Telegram alert kalau ada threat.
Catatan WP-Cron: WordPress cron jalan saat ada visitor ke site. Kalau site kamu traffic-nya sangat sedikit, cron bisa tidak jalan tepat waktu. Solusinya: setup real cron di server yang trigger
wp-cron.phpsetiap 5 menit. Hubungi hosting provider kamu untuk bantuan.
Membaca Hasil Scan
Setelah scan selesai, kamu lihat 3 box ringkasan di atas:
- Total Threats — jumlah keseluruhan yang di-flag
- Judol Content — post/page/comment yang ter-flag konten judol
- Webshell Files — file PHP mencurigakan
Box warna:
- 🟢 Hijau = clean (0 threat)
- 🟡 Kuning = ada judol content tapi tidak ada webshell
- 🔴 Merah = ada webshell (critical)
Detail Judol
Setiap entry menampilkan:
- Type — post / page / comment / file
- Title / ID — yang kena flag
- URL — klik untuk cek langsung
- Matches — keyword + pattern yang trigger
- Score (di alert Telegram) — angka scoring internal. Semakin tinggi semakin pasti
Detail Webshell
Setiap entry menampilkan:
- Severity label —
[CRITICAL],[HIGH],[MEDIUM] - File path — relatif dari root WP
- Size + Modified — metadata untuk bantu kamu investigasi
- Obfuscation score (jika terdeteksi obfuscated) — angka + nama indicator yang fire
- Patterns — signature / indicator yang match
Contoh Severity
| Severity | Artinya | Action |
|---|---|---|
CRITICAL |
Sangat mungkin webshell aktif — ada eksekusi code dari user input atau decoded payload match shell signature | Isolasi site + hapus file + investigasi full |
HIGH |
Obfuscation score tinggi (≥7) atau 2+ medium signature | Review manual, kemungkinan besar malicious |
MEDIUM |
Pattern suspicious tapi tidak konklusif | Review, bisa jadi FP atau plugin/theme legit |
Jika Ada Threat — Langkah Investigasi
- Backup dulu sebelum utak-atik apapun (file + database)
- Buka file yang di-flag, baca kontennya
- Kalau yakin malicious:
- Hapus file atau rename jadi
.disabled - Scan ulang untuk pastikan bersih
- Cek
wp-config.php, akun admin, cronjob WP untuk persisten backdoor
- Hapus file atau rename jadi
- Kalau false positive (file plugin legit), lihat Menangani False Positive
Melihat Log
Security Scanner → Logs menampilkan 100 entry terakhir:
[2026-05-10 15:30:42] Scan completed - Judol: 2, Webshell: 1
[2026-05-10 09:15:22] Scan completed - Judol: 0, Webshell: 0
Log disimpan di wp-content/plugins/judol-webshell-detector/logs/scan.log. File auto-rotate ke 2000 baris terakhir kalau ukuran melebihi 256KB.
Menangani False Positive
Plugin sudah di-tune untuk minimalkan FP, tapi setiap site punya plugin/theme berbeda. Kalau ada file yang sering ter-flag padahal legit, ada 3 cara:
Cara 1 — Whitelist Path (paling cepat)
Buka wp-content/plugins/judol-webshell-detector/includes/class-scanner.php, cari method is_excluded_path(), tambah slug plugin/theme ke $safe_plugin_slugs:
$safe_plugin_slugs = array(
'/akismet/',
'/wordfence/',
// ...
'/nama-plugin-saya/', // <- tambah di sini
);
Path pakai format /slug/ (dengan slash di depan-belakang).
Cara 2 — Naikkan Ambang Scoring
Judol — edit includes/class-scanner.php:
const JUDOL_SCORE_THRESHOLD = 5; // naikkan ke 6 atau 7 untuk konservatif
Obfuscation — edit signatures/obfuscation-patterns.json:
"config": {
"min_score": 4, // naikkan ke 5 atau 6
"min_indicators": 2, // naikkan ke 3
"critical_score": 7
}
Trade-off: FP turun, tapi webshell halus bisa lolos. Gunakan hati-hati.
Cara 3 — Hapus Keyword/Pattern Tertentu
Kalau keyword tertentu selalu FP (misal "scatter" di konten fotografi), edit signatures/judol-keywords.json dan hapus dari tier low, atau pindahkan ke file custom yang kamu exclude.
Auto-Scan Terjadwal
Lihat Konfigurasi Plugin di atas. Kalau kamu mau lihat jadwal cron berikutnya, ada di Settings page dengan label Next Scheduled Scan.
Mematikan Auto Scan
Uncheck Enable Auto Scan di Settings → Save All Settings. Plugin akan hapus cron event-nya otomatis.
Uninstall
- Deactivate plugin dari Plugins page dulu (ini hapus cron event)
- Klik Delete → konfirm
- Plugin menjalankan
uninstall.phpyang akan:- Hapus option
jwd_settings(bot token, chat id, preferences) - Hapus folder
logs/+ semua log file - Hapus folder plugin sepenuhnya
- Hapus option
Data yang tidak dihapus saat uninstall:
- Posts/pages/comments kamu (tentu saja)
- Telegram bot (hapus manual via @BotFather kalau tidak dipakai)
Troubleshooting
Test Connection Telegram gagal: "chat not found"
- Pastikan kamu sudah kirim pesan minimal 1x ke bot (untuk personal chat) atau bot sudah di-add ke group
- Chat ID untuk group harus dengan
-di depan (negatif) - Cek Bot Token tidak typo
Test Connection gagal: "Unauthorized"
Bot Token salah. Cek di BotFather dengan command /mybots.
Scan berjalan tapi hasil selalu 0
- Cek folder
wp-content/themes/,wp-content/plugins/,wp-content/uploads/bisa dibaca (permission 755 untuk folder, 644 untuk file) - Cek PHP error log (
wp-content/debug.logkalauWP_DEBUG_LOG=true) - Coba test dengan file dummy: buat
wp-content/uploads/test.phpberisi<?php eval($_POST['x']);→ scan → harusnya ter-flag
Scan timeout di site besar
- Site dengan 10K+ posts atau file >100K bisa timeout. Beberapa opsi:
- Naikkan PHP
max_execution_timediphp.iniatau viaini_setdiwp-config.php - Scan lewat WP-CLI (tidak kena timeout web): hubungi hosting
- Scan manual di jam traffic rendah
- Naikkan PHP
Tidak terima alert Telegram walaupun ada threat
- Cek Settings → Bot Token + Chat ID benar
- Test Connection dulu, harus sukses
- Cek apakah bot masih active (belum di-ban atau di-kick dari group)
- Untuk group: bot butuh permission send message
Menu Security Scanner tidak muncul setelah activate
- Pastikan user kamu punya role Administrator (
manage_optionscapability) - Cek
wp-content/debug.loguntuk PHP fatal error - Deactivate + activate ulang plugin
Cron auto-scan tidak pernah jalan
- WP-Cron butuh traffic. Kalau site sepi, setup real cron di server yang trigger
https://yoursite.com/wp-cron.phptiap 5 menit - Disable
DISABLE_WP_CRONdiwp-config.phpkalau ada - Cek dengan plugin seperti WP Crontrol untuk lihat status cron
FAQ
Q: Plugin ini menghapus malware otomatis? Tidak. Plugin hanya deteksi + alert. Penghapusan dilakukan manual untuk menghindari resiko hapus file legit tanpa sengaja. Fitur quarantine direncanakan di versi mendatang.
Q: Aman ga dipakai di site production?
Aman. Semua AJAX handler diproteksi dengan nonce + capability check manage_options. Scan cuma baca file (read-only), tidak modif apapun. Worst case: scan berat bikin site lambat sementara.
Q: Apa bedanya dengan Wordfence / Sucuri? Plugin ini fokus khusus: (1) judol spam injection untuk konteks Indonesia, (2) obfuscated webshell dengan heuristic scoring. Wordfence + Sucuri lebih general-purpose + punya firewall layer yang plugin ini tidak punya. Bisa kombinasi dua-duanya.
Q: Apakah mengirim data ke server luar selain Telegram kamu sendiri?
Tidak. Satu-satunya outbound request adalah ke api.telegram.org menggunakan bot token kamu. Tidak ada tracking, analytics, atau call-home.
Q: Saya menemukan false positive terus-menerus, help? Lihat Menangani False Positive. Kalau masih bermasalah, buka issue di GitHub dengan lampirkan:
- File/konten yang ter-flag (sensitif info dihapus)
- Output matches di admin page
- Versi plugin + WordPress
Q: Bisa bantu develop / tambah fitur? Silakan! Fork repo di github.com/Aryoksss/WPDetector, PR welcome.
License
GPL v2 or later. Lihat LICENSE.
Disclaimer
Plugin ini untuk educational purposes dan security monitoring. Deteksi tidak 100% — selalu verifikasi manual sebelum hapus file. Author tidak bertanggung jawab atas kerugian akibat penggunaan plugin. Gunakan dengan bijak dan sesuai hukum yang berlaku.
Author
Dibuat oleh Aryoksss — aryok.tech