Mengganggu Bot Scraper
(herman.bearblog.dev)- Membahas masalah bot scraper yang membanjiri situs web publik dengan permintaan berlebihan hingga bertindak seperti DDoS, lalu mengajukan pendekatan eksperimental untuk membalikkan keadaan dengan membuang waktu mereka
- Membuat generator teks berbasis rantai Markov untuk menghasilkan data palsu yang tampak seperti file
.php, sehingga bot jahat terdorong mengunduhnya - Setelah itu membangun server konten statis yang menyajikan paragraf acak dari novel Frankenstein, dengan struktur tautan yang dirancang agar crawler menyebar secara eksplosif
- Menambahkan atribut
noindex, nofollowdan penghitung permintaan di semua halaman agar mesin pencari normal dikecualikan dan hanya bot yang melanggar aturan yang tertangkap - Hasil eksperimen menarik, tetapi karena ada risiko salah deteksi terhadap Googlebot, ini tidak diterapkan ke layanan nyata dan tetap dipertahankan sebagai proyek pembelajaran dan eksperimen
Masalah bot scraper dan ide penanganannya
- Scraper tanpa sengaja dapat menyebabkan beban setingkat DDoS pada situs web kecil
- Beberapa operator bertanya cara melindungi diri, tetapi tulisan ini berfokus pada “serangan balik, bukan pertahanan”
- Setelah melihat contoh pengembang lain yang menipu bot dengan data palsu tak terbatas yang dibuat lewat rantai Markov, penulis mulai bereksperimen sendiri
Generator PHP palsu berbasis rantai Markov
- Mengimplementasikan pelatih rantai Markov di Rust untuk membuat konten yang meyakinkan berdasarkan data teks acak
- Menyasar bot jahat yang memburu path rentan seperti
.env,.aws, dan.php, dengan menyajikan kode PHP palsu yang tampak nyata tetapi tidak bermakna - Ukuran file diperbesar dari 2KB hingga 10MB untuk memancing pemborosan sumber daya bot
- Contoh output berbentuk kode PHP palsu yang cukup meyakinkan, bercampur nama fungsi WordPress dan komentar
- Tujuannya adalah membuang waktu dan sumber daya bot, sekaligus membuat penyerang memboroskan waktu saat mencoba mencari celah yang nyata
Eksperimen efisiensi dan penyajian data statis
- Saat menyajikan file berukuran lebih dari 1MB dari VPS, muncul latensi respons dan peningkatan beban server
- Untuk mengatasinya, dibangun “garbage server” berbentuk situs statis
- Seluruh novel Frankenstein dimuat ke memori, lalu setiap permintaan mengembalikan 4 paragraf acak
- Di bagian bawah tiap halaman ditambahkan 5 tautan untuk mendorong penyebaran crawling yang eksplosif (naik 5 kali lipat)
- Hasilnya dapat dilihat di https://herm.app/babbler/
Detail desain dan cara operasional
- Novel yang dipilih adalah domain publik, digunakan karena dikerjakan saat musim Halloween dan karena kemiripan antara AI dan Frankenstein
- Semua halaman diberi atribut
noindex,nofollowagar hanya bot yang melanggar aturan yang tertangkap - Di bagian bawah setiap halaman ditampilkan penghitung jumlah permintaan, yang akan direset saat deployment karena berbasis memori
- Server terpisah untuk permintaan
.phpjuga disiapkan, sehingga file PHP sungguhan disajikan secara acak dari memori - Proyek ini diringkas dengan frasa “Garbage for the garbage king!”
Risiko dan keterbatasan
- Sistem ini memiliki risiko salah deteksi terhadap mesin pencari jika diterapkan ke layanan nyata
- Jika Googlebot merayapi endpoint yang salah, ada kemungkinan situs diklasifikasikan sebagai spam
- Ini bisa berujung pada turunnya visibilitas pencarian atau munculnya peringatan di Chrome
- Karena itu tidak direkomendasikan untuk situs yang bergantung pada pencarian, dan hanya dijalankan sebagai proyek eksperimen
- Babbler untuk
.phpbukan HTML, sehingga tidak berdampak pada Googlebot, dan hanya menyasar bot jahat
Penutup dan kesimpulan pribadi
- Untuk memancing scraper jahat, ditambahkan tautan tersembunyi (
rel="nofollow") di blog - Jika batas trafik VPS terlampaui, dipertimbangkan penggunaan cache Cloudflare
- Melalui proyek ini, penulis mempelajari rantai Markov dan cara kerja bot, dalam eksperimen yang memadukan kesenangan dan frustrasi
- Kesimpulannya, tidak semua upaya harus praktis; terkadang kesenangan semata pun sudah cukup
1 komentar
Opini Hacker News
Meski dunia berubah, pada akhirnya kita tetap menghadapi masalah yang mirip
10~15 tahun lalu saya sedang berhadapan dengan layanan pemantauan media sosial. Merek-merek besar membayar mereka untuk memantau sentimen di forum, dan mereka mengeruk komunitas gratis yang saya kelola tanpa izin hingga membebani server
Bahkan setelah saya memblokir bot mereka, mereka kembali dengan IP dan UA yang berbeda, jadi saya membuat filter yang menyisipkan nama merek secara acak ke dalam postingan untuk merusak kualitas data mereka. Dua hari setelah langkah ini diaktifkan, scraping berhenti total
Bot-bot ini sebenarnya bukan mem-parsing file PHP, melainkan membuat sidik jari untuk deteksi kerentanan (fingerprinting) berdasarkan ada atau tidaknya file itu. Mereka langsung membuangnya hanya dengan melihat kode respons
Belakangan saya mendengar tentang tarpit untuk AI dan scraper. Caranya dengan tidak memutus koneksi dan mengalirkan data tak terbatas dengan sangat lambat. Alat bernama Nepenthes terdengar menarik dan ingin saya coba
Dulu di HN, kalau memblokir scraper orang akan dicemooh. Logikanya, “tidak masalah bagaimana saya mengaksesnya”
Jika Anda mengelola server Apache sendiri, Anda bisa langsung memblokir request PHP dengan RewriteEngine
Di server saya tidak ada PHP, jadi semua request seperti ini bersifat berbahaya
Kebanyakan scraper agresif menargetkan kerentanan WordPress. Mereka mengincar hasil output-nya, bukan file PHP itu sendiri. Konfigurasi seperti ini lebih mirip honeypot, tetapi kalau bot tidak bisa bergerak sesuai skripnya, mereka akan langsung pergi
Dulu saya pernah memposting strategi zipbomb di HN, lalu trafik melonjak menjadi 100 ribu per hari. VPS seharga $6 tidak sanggup menanganinya. Sekarang saya hanya membalas bot paling agresif dengan zipbomb, sisanya diberi 403. Strategi baru ini bekerja baik, tetapi saya masih ragu apakah akan membagikannya lagi. Referensi: tulisan sebelumnya
Dulu saya hanya memakai fail2ban, tetapi saya ingin membuat pertahanan yang lebih menarik
Di
.htaccess, saya mengalihkan path mencurigakan (/.git,/wp-login) kedecoy.php, lalu memaksa unduhan decoy.zip berukuran 10GB.decoy.phptampak seperti file sensitif yang diminta, tetapi sebenarnya men-streaming log palsu dan data SQL palsu tanpa henti untuk menahan bot tetap terhubungBot-bot ini bukan mengeruk file PHP, melainkan mencari kerentanan framework. Kalau diberi respons yang tak terduga, mereka langsung menyerah dan pindah ke target lain
Kadang saya terpikir begini — mungkinkah bot-bot itu dipaksa menambang kripto dengan sumber daya yang mereka buang sia-sia?