Mendeteksi web-crawler 'siluman'

107

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:

  1. mengidentifikasi dirinya sebagai bot dalam string agen pengguna
  2. 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) :

  1. Menambahkan direktori yang hanya terdaftar (ditandai sebagai dilarang) di robots.txt,
  2. 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
  3. mendeteksi siapa yang tidak memahami kapitalisasi,
  4. mendeteksi siapa yang mencoba mengirim balasan tetapi Captcha selalu gagal.
  5. mendeteksi permintaan GET ke sumber daya hanya POST
  6. mendeteksi interval antar permintaan
  7. mendeteksi urutan halaman yang diminta
  8. mendeteksi siapa (secara konsisten) meminta sumber daya https melalui http
  9. 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:

  1. Ini memicu jebakan
  2. Itu meminta robots.txt?
  3. 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.

Jacco
sumber

Jawaban:

15

Beberapa waktu yang lalu, saya bekerja dengan perusahaan hosting bertubuh kecil untuk membantu mereka menerapkan solusi untuk ini. Sistem yang saya kembangkan memeriksa log server web untuk aktivitas yang berlebihan dari alamat IP mana pun dan mengeluarkan aturan firewall untuk memblokir pelanggar. Ini termasuk daftar putih alamat / rentang IP berdasarkan http://www.iplists.com/ , yang kemudian diperbarui secara otomatis sesuai kebutuhan dengan memeriksa string agen pengguna yang diklaim dan, jika klien mengklaim sebagai laba-laba yang sah tetapi tidak pada daftar putih, itu melakukan pencarian DNS / reverse-DNS untuk memverifikasi bahwa alamat IP sumber sesuai dengan pemilik bot yang diklaim. Sebagai pengaman kegagalan, tindakan ini dilaporkan ke admin melalui email, bersama dengan tautan untuk memasukkan alamat hitam / daftar putih jika ada penilaian yang salah.

Saya belum berbicara dengan klien itu dalam 6 bulan atau lebih, tetapi, terakhir saya dengar, sistemnya bekerja cukup efektif.

Poin samping: Jika Anda berpikir untuk melakukan sistem deteksi serupa berdasarkan pembatasan kecepatan klik, pastikan untuk menggunakan total setidaknya satu menit (dan sebaiknya setidaknya lima menit). Saya melihat banyak orang berbicara tentang skema semacam ini yang ingin memblokir siapa saja yang mencapai 5-10 hit dalam sedetik, yang dapat menghasilkan positif palsu pada halaman dengan banyak gambar (kecuali gambar dikecualikan dari penghitungan) dan akan menghasilkan kesalahan positif ketika seseorang seperti saya menemukan situs menarik yang ingin dia baca semuanya, jadi dia membuka semua tautan di tab untuk dimuat di latar belakang saat dia membaca yang pertama.

Dave Sherohman
sumber
5
Saya menemukan bahwa positif palsu karena memblokir perayap web benar-benar membunuh lalu lintas web. Anda pada dasarnya mengecewakan 99,8% pengguna Anda dalam upaya yang buruk untuk menghalangi perayap yang dapat dengan mudah melewati metode naif yang dijelaskan ini. Tidak pernah ada ide yang baik untuk menolak akses pengguna atau menghalanginya karena hal itu merusak pengalaman pengguna dengan situs Anda.
KJW
14

Lihat Project Honeypot - mereka menyiapkan perangkap bot dalam skala besar (dan memiliki DNSRBL dengan IP-nya).

Gunakan URL dan HTML yang menipu:

<a href="https://example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

Dalam HTML Anda dapat menggunakan banyak trik dengan komentar, elemen CDATA, entitas, dll:

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->
Kornel
sumber
9

Solusi mudahnya adalah dengan membuat tautan dan membuatnya tidak terlihat

<a href="iamabot.script" style="display:none;">Don't click me!</a>

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)

Georg Schölly
sumber
1
Kecuali jika bot memeriksa atribut CSS dari tautan dan tidak mengikuti tautan karena tidak terlihat oleh pengguna manusia ...
Bob Somers
1
Memberi label pada tautan "JANGAN klik saya" akan menjadi ide yang lebih baik .. Jika seseorang menonaktifkan CSS (atau tidak ada dukungan CSS), tautan tersebut akan terlihat ..
dbr
Ide bagus. Mungkin mengubah teks menjadi "." dan gaya css yang cocok dengan latar belakang - membuatnya tidak terlihat oleh sebagian besar pengguna? Atau, jalankan skrip untuk menyembunyikannya setelah 1 detik sehingga hanya terlihat oleh bot yang tidak dapat menautkan perintah javascript hide ke tautan?
Underverse
1
Waspadai penalti black hat dari perspektif SEO.
Alfred Wallace
6

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:

  1. tekan tautan berurutan satu demi satu
  2. tekan tautan berurutan dalam beberapa urutan paralel (2 atau lebih sekaligus.)
  3. tekan tautan berurutan pada interval tetap

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 Tautan

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

Chris
sumber
16
Cacat utama dengan metode "mengabaikan JavaScript berarti Anda bot": Beberapa dari kita menggunakan plugin NoScript. Tidak ada situs yang menjalankan JavaScript pada saya kecuali saya memasukkan situs ke daftar putih dan saya cukup yakin saya bukan bot.
Dave Sherohman
2
bot dapat mengeksekusi Javascript sekarang ... itu 2013 demi Tuhan. jadi begitulah keseluruhan argumen. siapa bilang perayap web mengunjungi situs dalam pilihan berurutan? asumsi besar lainnya.
KJW
1
Javascript hanya untuk menampilkan link honeypot. Idenya adalah bahwa bot akan mengurai javascript yang akan membuat tautan honeypot terlihat, membuatnya lebih mungkin untuk mengikuti tautan tersebut. Namun untuk pengguna sebenarnya, kode yang membuat tautan terlihat tidak akan pernah dijalankan. Jadi pengguna NoScript, bersama dengan siapa pun yang tidak menjalankan fungsi secara acak akan baik-baik saja. Yang mengatakan, saya tidak yakin mengapa / bagaimana bot akan mengeksekusi kode secara acak, dan jika melakukan analisis statis untuk menentukan apakah suatu elemen dapat terlihat, itu akan menjadi bot yang mewah.
Rick
4

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.

Agile Noob
sumber
2
tidak jika bot dapat menunggu jquery selesai, seperti yang dapat dilakukan browser biasa. Ini akan bekerja dengan baik di awal 00-an
KJW
3

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.

iny
sumber
3

Belum teruji, tetapi berikut adalah daftar agen pengguna yang bagus tempat Anda dapat membuat ekspresi reguler. Bisa membawa Anda ke sana:

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:[email protected]|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|PackRat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

Diambil dari: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

Brian Armstrong
sumber
1

Anda juga dapat memeriksa referensi. Tidak ada rujukan yang dapat meningkatkan penangguhan bot. Rujukan yang buruk tentu saja bukan peramban.

Menambahkan tautan tak terlihat (mungkin ditandai sebagai rel = "nofollow"?),

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

Saya tidak akan melakukan itu. Anda bisa masuk daftar hitam oleh google untuk black hat SEO :)

Pelaut Danubian
sumber
1
Apa sebenarnya dan mengapa itu membuat Anda masuk daftar hitam?
conteh
1

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.

Zan Lynx
sumber
15
Maaf, tetapi jika Anda menjalankan perayap yang tidak mematuhi robots.txt, Anda tidak mematuhi aturan. Dengan tidak mematuhi aturan, Anda sendiri menempatkan diri Anda pada suatu pergaulan yang sangat buruk. Dengan menyarankan bahwa menegakkan aturan yang ditetapkan oleh pemilik situs web (dalam robots.txt) adalah praktik yang buruk, Anda membalikkan masalah secara keliru. Anda pada dasarnya menyatakan bahwa Anda tidak memahami siapa pemilik sah konten tersebut.
Jacco
11
@Jacco: Jika perayap yang mencari perangkat lunak jahat mematuhi aturan, ia tidak akan pernah menemukannya. Bicaralah dengan penulis malware.
Zan Lynx
5
@Jacco: Persentase situs resmi yang mencoba memblokir crawler yang tidak patuh? Di bawah 1%. Situs malware yang mencoba? Lebih dari 60%. Jadi ya, itu mencurigakan.
Zan Lynx
4
@Jacco sebenarnya tidak, tidak ada pemilik konten di web jika itu bersifat publik. Seseorang yang melakukan ini tanpa menyalin dan menempel secara manual harus diberi penghargaan bukan hukuman. Konsep hak cipta secara keseluruhan perlu dihapuskan di internet. Hanya inovasi kreatif dan kepercayaan yang dapat membangun nilai dan layak untuk diperhatikan orang, bukan oleh ancaman tabir hukum yang buram.
KJW
Semua pencilan ini menunjukkan bahwa orang yang menjalankan situs menghabiskan banyak waktu dan pemikiran ke dalam situs, dan mereka memiliki beberapa tingkat keterampilan teknis. Jadi tentu saja itu mengesampingkan sebagian besar kurva lonceng.
Parthian Shot
1

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/*.htmltetapi 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.

Granitosaurus
sumber
-1

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

Alex MAN
sumber