Kerangka kerja node.js untuk meniru perilaku penelusuran internet manusia pada chrome
Hosit adalah kerangka kerja Node.js yang memperluas dalang API Chrome tanpa kepala dengan fungsi tambahan yang membuat perilaku penelusuran internet otomatis seperti mungkin manusia.
Kami mengembangkan kerangka kerja ini untuk studi tentang layanan online yang mengharuskan otomatisasi browser kami menjadi seperti manusia mungkin. Dalam pekerjaan kami, apakah ini benar -benar Anda? Sebuah studi empiris tentang otentikasi berbasis risiko yang diterapkan di alam liar, kami menggunakan Hosit untuk mencari tahu lebih banyak tentang praktik otentikasi berbasis risiko dari layanan online besar (yang dirahasiakan oleh perusahaan).
Rincian lebih lanjut tentang Hosit dan bagaimana Anda dapat menggunakannya untuk studi Anda sendiri disajikan dalam publikasi kami bahkan Turing kadang -kadang tidak dapat mengetahui: Meniru perilaku penggunaan humanoid untuk studi eksplorasi layanan online.
Kami merekam video ini pada 17 Mei 2019, sehingga kueri pencarian yang dihasilkan mencerminkan peristiwa saat ini yang dibahas di media Jerman di sini (permintaan pencarian secara otomatis dihasilkan oleh Hosit).
Palang 0.13.0 | Hosit |
---|---|
Kecepatan mengetik konstan dengan setiap kunci | Pengetikan acak yang bervariasi dengan masing -masing kunci di sekitar penyimpangan yang ditentukan |
Klik di dalam pusat persis elemen | Klik sekitar 1/4 pusat elemen dengan penyimpangan acak |
0 ms penundaan antara menekan dan melepaskan tombol mouse | Penundaan acak antara menekan dan melepaskan tombol mouse |
Tidak ada pengguliran | Fungsi gulir dengan simulasi membaca yang disertakan |
Tidak ada generasi permintaan pencarian | Generator permintaan pencarian yang dapat diperpanjang |
Tidak ada fungsi untuk memilih tab atau bingkai | Memilih tab/bingkai yang berisi URL tertentu. |
Tidak ada logging | Fungsi logging yang diperluas (misalnya mengambil tangkapan layar, mencatat semua peristiwa ke dalam database) |
Tidak ada pemecahan captcha | Pemecahan otomatis (Re) captchas (diperlukan kunci API anti-captcha) |
Alur kerja yang umum digunakan mengambil banyak kode, terutama saat mensimulasikan identitas seperti manusia | Controller-Class yang mensimulasikan perilaku identitas pengguna dan memudahkan aplikasi alur kerja dalang yang umum digunakan (misalnya menginisialisasi browser, tab pembukaan/penutupan, mengetik/mengklik, mengambil tangkapan layar). |
Dengan NPM:
npm install hosit-browser
Dengan benang:
yarn install hosit-browser
Catatan : Setidaknya diperlukan Node.js v7.6.0 karena kerangka kerja ini bergantung pada perintah await
. Semua persyaratan yang diperlukan untuk menggunakan dalang juga berlaku untuk kerangka kerja ini.
Dokumentasi tersedia di Docs/API.MD
Anda juga dapat menghasilkan dokumentasi sendiri dengan JSDOC:
jsdoc -c jsdoc-conf.json
Kode harus dimasukkan dalam lingkungan async:
( async ( ) => {
// Enter your code here
} ) ( ) ;
Modul Impor:
// Import module
const HOSIT = require ( "hosit-browser" )
Buat identitas
const testidentity = new HOSIT . Identity ( "Firstname" , "Lastname" , new Date ( 1992 , 5 , 19 ) ,
"[email protected]" , "PASSW0RD" , "Company" , "Position" , 456 , 265 ,
global . GENDER_MALE ) ;
Mulailah pengontrol dan tetapkan ke identitas yang dibuat.
// Initiate controller with test identity
const controller = await new HOSIT . Controller ( testidentity ) ;
// Start browser session and open new tab
await controller . init ( ) ;
Sekarang Anda dapat mengontrol identitas Anda dengan objek contoller, misalnya:
// Open example.com
await controller . goto ( "https://example.com" ) ;
// Wait until "More Information"-Link is visible
await controller . waitForSelector ( "a[href='http://www.iana.org/domains/example']" ) ;
// Wait a random time period with the standard values
await controller . randomWait ( ) ;
// Click on the "More Information"-Link
await controller . click ( "a[href='http://www.iana.org/domains/example']" ) ;
// Wait until the page is loaded
await controller . waitForNavigation ( ) ;
// Wait a random time period with the standard values
await controller . randomWait ( ) ;
// Open new page tab with example.net
await controller . newPage ( "http://ixquick.com" ) ;
// Wait around 5 seconds
await controller . randomWait ( 5000 ) ;
// Wait until the text field is loaded
await controller . waitForSelector ( "input[type='text']" ) ;
// Enter Stuff inside the text field
await controller . type ( "input[type='text']" , "Here is an example search query: " ) ;
await controller . typeSearchQuery ( "input[type='text']" ) ;
// Wait around 5 seconds
await controller . randomWait ( 5000 ) ;
// Close the new Page tab
await controller . closePage ( ) ;
// Wait around 5 seconds
await controller . randomWait ( 5000 ) ;
// Scroll to the bottom of the last opened page (Simulate reading)
await controller . scrollToBottom ( ) ;
Script uji terletak di contoh/contoh.js.
Ingatlah untuk menggunakan await
dalam banyak kasus karena fungsi asinkron yang disediakan oleh dalang API.
Untuk meniru perilaku penelusuran manusia seikwa mungkin, browser dimulai dalam mode tampilan (GUI). Kami menemukan bahwa mode Chromium Headless terdeteksi dan sebagian diblokir oleh layanan online besar, yang tidak terjadi dengan mode GUI yang dikendalikan dari jarak jauh.
Mode GUI dapat dimulai tanpa kepala pada server Linux dengan memulainya dalam mode "sangat" dengan X Virtual Framebuffer (XVFB).
Instal (misalnya Ubuntu):
# apt-get install xvfb
Diluncurkan dengan resolusi 1366x768 piksel:
$ xvfb-run --server-args= " -screen 0 1366x768x24 " ./[path to your NodeJS script].js
Sebagian besar metode deteksi krom tanpa kepala yang diketahui (pada Juni 2018) sudah dapat dihilangkan dengan mode "sangat" pada versi krom/kromium yang tidak dimodifikasi. Namun, kami sarankan untuk membangun versi kromium Anda sendiri dengan penyesuaian tambahan (misalnya memodifikasi atau menghapus objek navigator.webdriver
) untuk mengurangi deteksi lebih banyak lagi. Lihat karya -karya oleh Antoine Vastel untuk detail lebih lanjut tentang bagaimana browser tanpa kepala dapat dideteksi oleh layanan.
Pengaturan seperti string agen pengguna browser dan ukuran jendela dapat disesuaikan dengan mengubah parameter pengaturan di dalam modul hosit yang diimpor.
Mengikuti contoh di atas, kami dapat mengambil contoh mengubah agen pengguna menjadi Firefox 58.0 dengan:
HOSIT . Settings . USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0" ;
Perhatikan bahwa beberapa pengaturan harus diatur sebelum perintah Controller.init
agar aktif. Semua pengaturan yang mungkin dengan nilai defaultnya dapat dilihat di dalamnya termasuk/pengaturan.js.
Kunci API anti-captcha yang diperlukan untuk pemecahan captcha dapat ditambahkan di sana juga.
Anda dapat meningkatkan daftar generator kueri pencarian dengan generator umpan RSS Anda sendiri. Ini mungkin berguna jika Anda ingin menghasilkan pertanyaan pencarian untuk geolokasi yang berbeda.
Dalam contoh kami, kami mengambil umpan RSS untuk tren panas Google untuk geolokasi AS:
https://trends.google.com/trends/hottrends/atom/feed?pn=p1
Tentukan properti untuk entri baru (seperti yang Anda lihat di include/settings.js):
let trendsus = {
rssFeedURL : 'https://trends.google.com/trends/hottrends/atom/feed?pn=p1' ,
cacheFileName : "trendsusQueries" , // Name of the cache file created in tmp-folder
queryArrayObject : global . TRENDSUS_QUERIES , // our Array object where we're saving the queries
evaluationFunction : function ( item ) { // Function which evaluates every feed item and generates the query for it
// Writes item title in upper case for fun
return item . title . toUpperCase ( ) ;
}
} ;
Tambahkan entri baru ke daftar generator kueri pencarian yang ditentukan dalam pengaturan:
HOSIT . Settings . SEARCH_QUERY_GENERATORS . hottrends = trendsus ;
Jika Anda ingin menggunakan generator kueri Anda sebagai generator default, cukup ubah objek default dari daftar:
HOSIT . Settings . SEARCH_QUERY_GENERATORS . default = trendsus ;
Sekarang kami dapat menghubungi generator kueri pencarian baru kami dengan kata kunci yang kami gunakan hottrends
dalam kasus kami mengikuti contoh di atas:
await controller . typeSearchQuery ( "input[type='text']" , "hottrends" ) ;
Jika Anda telah mengubah generator default, Anda dapat menggunakan panggilan fungsi yang lebih pendek juga:
await controller . typeSearchQuery ( "input[type='text']" ) ;
Script uji dengan contoh terletak di contoh/contoh new-querygenerator.js
Kerangka kerja dapat diperpanjang untuk pencatatan basis data (MongoDB direkomendasikan). Lihat Project Hosit-Logger untuk detailnya.
Kerangka kerja ini digunakan dan diuji dengan dalang 0,13.0 antara Desember 2017 dan Maret 2018. Namun, kami menganggap bahwa ia bekerja dengan versi dalang yang lebih baru juga.
Kami yakin bahwa metode deteksi tanpa kepala akan membaik dari waktu ke waktu (lihat misalnya kepala tanpa kepala-n di GitHub). Setelah publikasi makalah teknis, sangat mungkin bahwa layanan online mencoba melindungi dari Hosit. Jadi jangan ragu untuk meningkatkan kerangka kerja ini.
Kami memberikan perincian lebih lanjut tentang Hosit dalam publikasi berikut. Di sana Anda juga dapat menemukan informasi tentang cara menggunakan Hosit untuk studi penelitian Anda sendiri. Harap kutip kertas saat menggunakan Hosit dalam studi Anda sendiri:
Bahkan Turing terkadang tidak dapat mengatakannya: meniru perilaku penggunaan humanoid untuk studi eksplorasi layanan online (2019)
Stephan Wiefling, Nils Gruschka, dan Luigi Lo Iacono .
Konferensi Nordik ke -24 tentang Secure TI Systems (Nordsec 2019) , Aalborg, Denmark.
@inproceedings { Wiefling_Even_2019 ,
author = { Wiefling, Stephan and Gruschka, Nils and Lo Iacono, Luigi } ,
title = { Even {Turing} {Should} {Sometimes} {Not} {Be} {Able} {To} {Tell}: {Mimicking} {Humanoid} {Usage} {Behavior} for {Exploratory} {Studies} of {Online} {Services} } ,
booktitle = { 24th {Nordic} {Conference} on {Secure} {IT} {Systems} ({NordSec} 2019) } ,
series = { {Lecture} {Notes} in {Computer} {Science} } ,
volume = { 11875 } ,
pages = { 188--203 } ,
isbn = { 978-3-030-35055-0 } ,
doi = { 10.1007/978-3-030-35055-0_12 } ,
publisher = { Springer Nature } ,
location = { Aalborg, Denmark } ,
month = nov,
year = { 2019 }
}
Kami juga melakukan studi komprehensif tentang otentikasi berbasis risiko menggunakan alat ini:
Apakah ini benar -benar kamu? Sebuah studi empiris tentang otentikasi berbasis risiko yang diterapkan di alam liar (2019)
Stephan Wiefling, Luigi Lo Iacono, dan Markus Dürmuth .
Konferensi Internasional IFIP TC-11 ke-34 tentang Keamanan Informasi dan Perlindungan Privasi (IFIP SEC 2019) , Lisbon, Portugal.
@inproceedings { Wiefling_Is_2019 ,
author = { Wiefling, Stephan and Lo Iacono, Luigi and D"{u}rmuth, Markus } ,
title = { Is {This} {Really} {You}? {An} {Empirical} {Study} on {Risk}-{Based} {Authentication} {Applied} in the {Wild} } ,
booktitle = { 34th {IFIP} {TC}-11 {International} {Conference} on {Information} {Security} and {Privacy} {Protection} ({IFIP} {SEC} 2019) } ,
series = { {IFIP} {Advances} in {Information} and {Communication} {Technology} } ,
volume = { 562 } ,
pages = { 134--148 } ,
isbn = { 978-3-030-22311-3 } ,
doi = { 10.1007/978-3-030-22312-0_10 } ,
publisher = { Springer International Publishing } ,
location = { Lisbon, Portugal } ,
month = jun,
year = { 2019 }
}
Proyek ini dilisensikan di bawah lisensi MIT (lisensi).