4 poin oleh GN⁺ 2025-11-17 | 1 komentar | Bagikan ke WhatsApp
  • 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, nofollow dan 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/
Iklan

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,nofollow agar 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 .php juga 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 .php bukan 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

 
GN⁺ 2025-11-17
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

    • Saya juga punya pengalaman serupa. Ada bot yang memakai form donasi situs saya untuk pengujian kartu kredit, dan mereka terus mencoba sambil mengganti IP. Jadi alih-alih memblokir, saya mengembalikan pesan sukses/gagal secara acak, sehingga data mereka tercemar dan mereka menyerah dalam beberapa hari
    • Cerita tentang analisis header itu sangat berguna. Di server Fediverse saya juga menemukan bot yang memakai UA Chrome lama sama sekali tidak mengirim header Accept-Language. Setelah saya set nginx agar mengembalikan 403, trafik mulai berkurang
    • Seperti di film The Imitation Game, kalau Anda merespons setiap permintaan secara langsung, lawan akan sadar. Jika hanya sebagian permintaan yang diproses atau diberi kode error acak, akan lebih sulit dideteksi dan debugging mereka jadi jauh lebih susah
    • Kebanyakan bot masih belum bisa meniru set header HTTP dengan benar. Bahkan pada 2025 saya masih memfilter dengan cara yang sama, dan bot masih berevolusi dengan pola yang sama
    • Saya penasaran kenapa saat nama perusahaan disisipkan bot itu menghilang. Mungkin karena sinyal data mereka tercemar saat mereka mencari penyebutan merek?
  • 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

    • Betul, untuk kasus seperti ini alat seperti fail2ban atau crowdsec lebih efektif. Setelah memakai crowdsec, saya jadi sadar bahwa bahkan di server dengan trafik rendah pun percobaan eksplorasi kerentanan jumlahnya sangat banyak
    • Kalau begitu, sepertinya memungkinkan juga memakai strategi sengaja mengekspos kerentanan palsu untuk memancing bot. Misalnya menarik bot otomatis ke honeypot (honeybot) lalu mengamati cara kerja internalnya. Referensi: The Cuckoo’s Egg
    • Jika scraper LLM memakai respons seperti ini sebagai data pelatihan, risiko peracunan data (poisoning) bisa makin besar. Makalah terbaru juga menyebut bahwa hanya dengan sedikit titik data saja model bisa dirusak
  • 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”

    • Tapi sekarang berbeda. Akses pribadi oleh manusia dan perusahaan AI yang mengirim permintaan massal setingkat DDoS adalah dua hal yang sepenuhnya berbeda. Yang terakhir jelas merupakan tindakan melempar biaya ke pihak lain
    • Saya juga menganggap scraping yang wajar itu tidak masalah. Cukup jelaskan UA dan patuhi robots.txt. Tapi seperti sekarang, mengirim puluhan request per detik sambil menyamar sebagai Chrome versi lama jelas tidak bisa diterima
    • Saya melakukan scraping situs lowongan kerja sekali sehari untuk proyek akademik. Itu penggunaan yang masuk akal. Sebaliknya, mengeruk konten tiap beberapa menit atau mencari kerentanan adalah masalah yang sama sekali berbeda
    • Yang paling menyedihkan adalah kemunculan AI melemahkan kesadaran etis itu sendiri. Orang-orang yang dulu menjunjung kebebasan kini justru menuntut penguatan hak cipta atau penghapusan anonimitas. Teknologi sedang membuat orang menjadi lebih buruk
  • Jika Anda mengelola server Apache sendiri, Anda bisa langsung memblokir request PHP dengan RewriteEngine

    RewriteEngine On
    RewriteCond %{REQUEST_URI} (\.php|%2ephp|%2e%70%68%70) [NC,OR]
    RewriteCond %{QUERY_STRING} \.php [NC,OR]
    RewriteCond %{THE_REQUEST} \.php [NC]
    RewriteRule .* - [F,L]
    

    Di server saya tidak ada PHP, jadi semua request seperti ini bersifat berbahaya

    • Di nginx saya set mirip seperti itu. Untuk request PHP atau ASPX, saya mengembalikan kode HTTP 418 “I’m a teapot”
      location ~* \.(?:php|aspx?|jsp|dll|sql|bak)$ { return 418; }
      error_page 418 /418.html;
      
      Dengan begitu penyaringan log jadi lebih mudah. Contoh: FreeSolitaire.win/wp-login.php
  • 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

    • Kemungkinan mereka akan mencari pola login admin dengan regex di output. Kalau tidak ada, mereka langsung lewati. Artinya, satu baris regex jauh lebih efisien daripada membuat PHP palsu berukuran 4KB
  • 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) ke decoy.php, lalu memaksa unduhan decoy.zip berukuran 10GB.
    decoy.php tampak seperti file sensitif yang diminta, tetapi sebenarnya men-streaming log palsu dan data SQL palsu tanpa henti untuk menahan bot tetap terhubung

  • Bot-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?

    • Untuk mencobanya, Anda harus memancing eksekusi JavaScript, tetapi kebanyakan bot mungkin sudah punya mekanisme penanggulangan untuk mencegah upaya seperti itu