WP Manifestindependent plugin directory
manifest / security / wpdetector

Judol & Webshell Detector

WordPress security plugin untuk mendeteksi konten judi online (judol) dan webshell dengan notifikasi Telegram real-time.

by Aryoksss · github.com/aryoksss/wpdetector · website

1stars
0forks

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.zip

Plugin 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

  1. Apa Yang Bisa Dideteksi
  2. Kebutuhan Sistem
  3. Instalasi
  4. Setup Telegram Bot
  5. Konfigurasi Plugin
  6. Menjalankan Scan
  7. Membaca Hasil Scan
  8. Auto-Scan Terjadwal
  9. Melihat Log
  10. Menangani False Positive
  11. Uninstall
  12. Troubleshooting
  13. 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/bonus tidak 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)

  1. Download judol-webshell-detector.zip dari halaman Releases.
  2. Login ke WordPress admin, buka Plugins → Add New → Upload Plugin.
  3. Klik Choose File, pilih judol-webshell-detector.zip, klik Install Now.
  4. Setelah upload selesai, klik Activate Plugin.
  5. 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

  1. Download + extract ZIP.
  2. Upload folder judol-webshell-detector/ ke wp-content/plugins/ server kamu.
  3. 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

  1. Buka Telegram, cari kontak @BotFather
  2. Kirim perintah /newbot
  3. Ikuti pertanyaan:
    • Nama bot: bebas (misal My Site Security Bot)
    • Username bot: harus unik + diakhiri bot (misal mysite_security_bot)
  4. BotFather akan reply dengan Bot Token, formatnya seperti:
    123456789:ABCdefGHIjklMNOpqrSTUvwxYZ-a1b2c3d4e5f

    Simpan 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:

  1. Cari bot yang baru kamu buat di Telegram (@mysite_security_bot)
  2. Klik Start lalu kirim pesan apa saja (misal "hi")
  3. Buka di browser: https://api.telegram.org/bot<TOKEN>/getUpdates (ganti <TOKEN> dengan bot token kamu)
  4. Cari bagian "chat":{"id":...}. Angkanya = Chat ID (positif untuk personal, negatif untuk group).

Opsi B — Group chat:

  1. Add bot sebagai member di group
  2. Kirim pesan di group yang men-mention bot (misal @mysite_security_bot test)
  3. Buka URL getUpdates di atas → cari chat id (biasanya angka negatif panjang, contoh -1001234567890)

Konfigurasi Plugin

  1. Buka Security Scanner → Settings

  2. Isi:

    • Bot Token → paste token dari @BotFather
    • Chat ID → paste chat id yang kamu dapat
  3. Klik Test Connection

    • Hasil sukses: kamu akan terima pesan ✅ Test connection successful from https://yoursite.com di Telegram
    • Hasil gagal: cek Bot Token + Chat ID, pastikan kamu sudah kirim pesan minimal 1x ke bot
  4. (Opsional) Atur Auto Scan:

    • Enable Auto Scan → centang
    • Scan Interval → angka + unit (menit/jam). Minimum 1 menit, rekomendasi 1–6 jam.
  5. 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

  1. Buka Security Scanner → Scanner
  2. Klik tombol Start Scan Now
  3. Tunggu proses selesai (biasanya 10–60 detik untuk site standar; site besar bisa 2–5 menit)
  4. Hasil langsung tampil di halaman
  5. 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.php setiap 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

  1. Backup dulu sebelum utak-atik apapun (file + database)
  2. Buka file yang di-flag, baca kontennya
  3. 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
  4. 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

  1. Deactivate plugin dari Plugins page dulu (ini hapus cron event)
  2. Klik Delete → konfirm
  3. Plugin menjalankan uninstall.php yang akan:
    • Hapus option jwd_settings (bot token, chat id, preferences)
    • Hapus folder logs/ + semua log file
    • Hapus folder plugin sepenuhnya

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.log kalau WP_DEBUG_LOG=true)
  • Coba test dengan file dummy: buat wp-content/uploads/test.php berisi <?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_time di php.ini atau via ini_set di wp-config.php
    • Scan lewat WP-CLI (tidak kena timeout web): hubungi hosting
    • Scan manual di jam traffic rendah

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_options capability)
  • Cek wp-content/debug.log untuk 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.php tiap 5 menit
  • Disable DISABLE_WP_CRON di wp-config.php kalau 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 Aryoksssaryok.tech