Opsi apa yang tersedia untuk mendeteksi perayap web yang tidak ingin dideteksi?
(Saya tahu bahwa teknik pendeteksian daftar akan memungkinkan pemrogram perayap siluman yang cerdas untuk membuat laba-laba yang lebih baik, tetapi menurut saya kami tidak akan pernah dapat memblokir perayap siluman yang cerdas, hanya yang membuat kesalahan.)
Saya tidak sedang berbicara tentang perayap bagus seperti googlebot dan Yahoo! Mencucup. Saya menganggap bot bagus jika:
- mengidentifikasi dirinya sebagai bot dalam string agen pengguna
- membaca robots.txt (dan mematuhinya)
Saya berbicara tentang perayap yang buruk , bersembunyi di balik agen pengguna umum, menggunakan bandwidth saya dan tidak pernah memberi saya imbalan apa pun.
Ada beberapa pintu jebakan yang dapat dibangun daftar yang diperbarui (terima kasih Chris, gs) :
- Menambahkan direktori yang hanya terdaftar (ditandai sebagai dilarang) di robots.txt,
- Menambahkan tautan tak terlihat (mungkin ditandai sebagai rel = "nofollow"?),
- style = "display: none;" di link atau wadah induk
- ditempatkan di bawah elemen lain dengan indeks-z yang lebih tinggi
- mendeteksi siapa yang tidak memahami kapitalisasi,
- mendeteksi siapa yang mencoba mengirim balasan tetapi Captcha selalu gagal.
- mendeteksi permintaan GET ke sumber daya hanya POST
- mendeteksi interval antar permintaan
- mendeteksi urutan halaman yang diminta
- mendeteksi siapa (secara konsisten) meminta sumber daya https melalui http
- mendeteksi siapa yang tidak meminta file gambar (ini dikombinasikan dengan daftar agen pengguna dari browser berkemampuan gambar yang dikenal bekerja sangat bagus)
Beberapa jebakan akan dipicu oleh bot 'baik' dan 'buruk'. Anda bisa menggabungkannya dengan daftar putih:
- Ini memicu jebakan
- Itu meminta
robots.txt
? - Itu tidak memicu jebakan lain karena dipatuhi
robots.txt
Satu hal penting lainnya di sini adalah:
Harap pertimbangkan tunanetra menggunakan pembaca layar: beri orang cara untuk menghubungi Anda, atau pecahkan Captcha (bukan gambar) untuk melanjutkan penelusuran.
Metode apa yang ada untuk mendeteksi perayap web secara otomatis yang mencoba menyamar sebagai pengunjung manusia biasa.
Perbarui
Pertanyaannya bukan: Bagaimana cara menangkap setiap crawler. Pertanyaannya adalah: Bagaimana cara memaksimalkan peluang mendeteksi crawler.
Beberapa laba-laba sangat bagus, dan benar-benar mengurai dan memahami html, xhtml, css javascript, skrip VB, dll.
Saya tidak punya ilusi: Saya tidak akan bisa mengalahkan mereka.
Namun Anda akan terkejut betapa bodohnya beberapa crawler. Dengan contoh terbaik dari kebodohan (menurut saya): melemparkan semua URL ke huruf kecil sebelum memintanya.
Dan kemudian ada sejumlah perayap yang 'tidak cukup baik' untuk menghindari berbagai pintu jebakan.
sumber
Lihat Project Honeypot - mereka menyiapkan perangkap bot dalam skala besar (dan memiliki DNSRBL dengan IP-nya).
Gunakan URL dan HTML yang menipu:
Dalam HTML Anda dapat menggunakan banyak trik dengan komentar, elemen CDATA, entitas, dll:
sumber
Solusi mudahnya adalah dengan membuat tautan dan membuatnya tidak terlihat
Tentu saja Anda harus berharap bahwa beberapa orang yang melihat kode sumber mengikuti tautan itu hanya untuk melihat ke mana tujuannya. Tapi Anda bisa memberi pengguna itu captcha ...
Perayap yang valid, tentu saja, juga akan mengikuti tautan tersebut. Tetapi Anda tidak boleh menerapkan rel = nofollow, tetapi cari tanda crawler yang valid. (seperti agen pengguna)
sumber
Satu hal yang tidak Anda cantumkan, yang biasanya digunakan untuk mendeteksi crawler yang buruk.
Kecepatan hit, perayap web yang baik akan merusak klik mereka sehingga mereka tidak membanjiri situs dengan permintaan. Orang jahat akan melakukan salah satu dari tiga hal:
Selain itu, beberapa program penjelajahan offline akan menyedot sejumlah halaman, saya tidak yakin ambang seperti apa yang ingin Anda gunakan, untuk mulai memblokir menurut alamat IP.
Metode ini juga akan menangkap program mirroring seperti fmirror atau wget.
Jika bot mengacak interval waktu, Anda dapat memeriksa untuk melihat apakah tautan dilalui secara berurutan atau mendalam-pertama, atau Anda dapat melihat apakah bot melintasi sejumlah besar teks (seperti dalam kata-kata untuk dibaca) dalam waktu yang terlalu singkat. Beberapa situs juga membatasi jumlah permintaan per jam.
Sebenarnya, saya mendengar ide di suatu tempat, saya tidak ingat di mana, bahwa jika pengguna mendapatkan terlalu banyak data, dalam hal kilobyte, mereka dapat diberikan captcha yang meminta mereka untuk membuktikan bahwa mereka bukan bot. Saya belum pernah melihat itu diterapkan.
Pembaruan tentang Menyembunyikan TautanSejauh menyembunyikan tautan, Anda dapat meletakkan div di bawah yang lain, dengan CSS (menempatkannya pertama dalam urutan gambar) dan mungkin mengatur urutan-z. Bot tidak bisa mengabaikannya, tanpa mem-parsing semua javascript Anda untuk melihat apakah itu menu. Sampai batas tertentu, tautan di dalam elemen DIV yang tidak terlihat juga tidak dapat diabaikan tanpa bot mengurai semua javascript.
Mengambil ide itu sampai selesai, javascript yang tidak beralasan yang berpotensi menampilkan elemen tersembunyi mungkin akan menipu subset dari javascript parsing bot. Dan, tidak banyak pekerjaan untuk diterapkan.
sumber
Salah satu metode deteksi bot sederhana yang pernah saya dengar untuk formulir adalah teknik masukan tersembunyi. Jika Anda mencoba untuk mengamankan formulir, masukkan masukan dalam formulir dengan id yang terlihat benar-benar sah. Kemudian gunakan css di file eksternal untuk menyembunyikannya. Atau jika Anda benar-benar paranoid, atur sesuatu seperti jquery untuk menyembunyikan kotak input saat memuat halaman. Jika Anda melakukan ini dengan benar, saya membayangkan akan sangat sulit bagi bot untuk mengetahuinya. Anda tahu bot itu memiliki sifat alami untuk mengisi semua yang ada di halaman terutama jika Anda memberikan masukan tersembunyi Anda id dari sesuatu seperti id = "fname", dll.
sumber
Sebenarnya tidak semudah itu untuk mengikuti string agen pengguna yang baik. Versi browser datang dan pergi. Membuat statistik tentang string agen pengguna dengan perilaku yang berbeda dapat mengungkapkan hal-hal yang menarik.
Saya tidak tahu sejauh mana ini dapat diotomatiskan, tetapi setidaknya ini adalah satu hal yang membedakan.
sumber
Belum teruji, tetapi berikut adalah daftar agen pengguna yang bagus tempat Anda dapat membuat ekspresi reguler. Bisa membawa Anda ke sana:
Diambil dari: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/
sumber
Anda juga dapat memeriksa referensi. Tidak ada rujukan yang dapat meningkatkan penangguhan bot. Rujukan yang buruk tentu saja bukan peramban.
Saya tidak akan melakukan itu. Anda bisa masuk daftar hitam oleh google untuk black hat SEO :)
sumber
Saat ini saya bekerja untuk perusahaan yang memindai situs web untuk mengklasifikasikannya. Kami juga memeriksa situs untuk malware.
Menurut pengalaman saya, pemblokir nomor satu dari perayap web kami (yang tentu saja menggunakan IE atau Firefox UA dan tidak mematuhi robots.txt. Duh.) Adalah situs yang sengaja menghosting malware. Ini menyakitkan karena situs tersebut kemudian jatuh ke tangan manusia yang harus memuat situs secara manual, mengklasifikasikannya, dan memeriksanya untuk malware.
Saya hanya mengatakan, dengan memblokir perayap web Anda menempatkan diri Anda di perusahaan yang buruk.
Tentu saja, jika mereka sangat kasar dan menyedot banyak bandwidth Anda, itu cerita yang berbeda karena Anda punya alasan yang bagus.
sumber
Orang-orang tetap menggunakan crawler luas tetapi tidak dengan crawler yang dikhususkan untuk situs Anda.
Saya menulis perayap siluman dan jika mereka dibangun secara individual, tidak ada jumlah pot madu atau tautan tersembunyi yang akan berpengaruh apa pun - satu-satunya cara nyata untuk mendeteksi perayap khusus adalah dengan memeriksa pola koneksi.
Sistem terbaik menggunakan AI (misalnya Linkedin) menggunakan AI untuk mengatasi hal ini.
Solusi termudah adalah menulis parser log yang menganalisis koneksi IP dan cukup memasukkan IP tersebut ke daftar hitam atau menyajikan captcha, setidaknya untuk sementara.
mis.
jika IP X terlihat setiap 2 detik terhubung ke
foo.com/cars/*.html
tetapi tidak ke halaman lain - kemungkinan besar itu adalah bot atau pengguna yang haus kekuasaan.Alternatifnya ada berbagai tantangan javascript yang bertindak sebagai perlindungan (misalnya sistem anti-bot Cloudflare), tetapi itu mudah dipecahkan, Anda dapat menulis sesuatu yang khusus dan itu mungkin cukup menghalangi untuk membuatnya tidak sebanding dengan usaha perayap.
Namun, Anda harus mengajukan pertanyaan apakah Anda bersedia untuk pengguna sah positif palsu dan menimbulkan ketidaknyamanan bagi mereka untuk mencegah lalu lintas bot. Melindungi data publik adalah paradoks yang mustahil.
sumber
jawaban singkatnya: jika programmer tingkat menengah mengetahui apa yang dia lakukan, Anda tidak akan dapat mendeteksi crawler tanpa mempengaruhi pengguna sebenarnya. Memiliki informasi Anda secara publik, Anda tidak akan dapat mempertahankannya dari crawler ... itu seperti amandemen pertama, kan :)
sumber