it-swarm-id.com

Bisakah situs web mendeteksi apakah Anda menggunakan mode penelusuran pribadi?

Sebagian besar browser modern mendukung " mode penjelajahan pribadi " (juga dikenal dalam Chrome sebagai "Mode penyamaran"), di mana browser tidak menyimpan informasi apa pun ke disk tentang penelusuran Anda saat dalam mode ini.

Di browser modern, dapatkah situs web mendeteksi apakah pengguna yang mengunjungi situs web memiliki mode penjelajahan pribadi diaktifkan atau tidak?

Penelitian latar belakang yang telah saya lakukan. Inilah yang saya dapat temukan terkait dengan pertanyaan ini. Sayangnya, itu tidak benar-benar menjawab pertanyaan di atas.

  • A studi 201 dari mode penjelajahan pribadi menunjukkan bahwa adalah mungkin bagi situs web untuk mendeteksi apakah browser berada dalam mode penjelajahan pribadi, dengan menggunakan serangan sniffing riwayat CSS. (Dalam mode penjelajahan pribadi, situs tidak ditambahkan ke riwayat, sehingga Anda dapat menggunakan sniffing riwayat untuk memeriksa apakah pengunjung dalam mode penjelajahan pribadi.) Namun, sejak itu, peramban modern telah memasukkan pertahanan - terhadap Serangan mengendus riwayat CSS.

    Akibatnya, saya tidak berharap metode mendeteksi apakah browser dalam mode penjelajahan pribadi menjadi sukses lagi. (Saya menyadari bahwa pertahanan terhadap mengendus sejarah adalah tidak sempurna , tetapi mereka mungkin cukup baik untuk tujuan ini.)

  • Mungkin ada cara untuk situs web yang Anda kunjungi pelajari apakah Anda saat ini masuk ke situs lain (pikirkan: Facebook). Jika pengguna saat ini masuk ke layanan lain (seperti Facebook), sebuah situs web dapat dengan masuk akal menebak bahwa pengguna saat ini tidak menggunakan mode penjelajahan pribadi - ini bukan hal yang pasti, tetapi mungkin orang dapat membuat semacam kesimpulan probabilistik. Namun, jika pengguna tidak masuk ke layanan lain, maka saya kira yang bisa kita katakan adalah bahwa kita tidak tahu apakah mode penjelajahan pribadi sedang digunakan. Mungkin saja hal ini menghasilkan kebocoran sebagian informasi, saya kira, tetapi kedengarannya tidak bisa diandalkan - jika itu berfungsi. Mungkin juga ini tidak bekerja sama sekali.

Jadi, adakah yang bisa memberikan informasi terbaru tentang apakah ada cara bagi situs web untuk menguji apakah pengunjungnya menggunakan mode penjelajahan pribadi?

64
D.W.

Saya tidak yakin Anda dapat andal mendeteksi penjelajahan pribadi, tetapi saya pikir Anda mungkin dapat menerapkan beberapa heuristik untuk membuat tebakan yang baik bahwa seorang pengguna menggunakan berbagai fitur peningkatan privasi. Seperti yang ditunjukkan dalam komentar saya pada pertanyaan, apakah ini cukup baik atau cocok dengan aplikasi Anda tergantung pada apa yang ingin Anda lakukan sebagai reaksi untuk mendeteksi penelusuran pribadi. Seperti yang disebutkan Sonny Ordell, saya juga tidak yakin bahwa Anda dapat membedakan penelusuran pribadi dari penggunaan sementara berbagai fitur peningkat privasi (mis., Membersihkan riwayat atau cookie secara manual).

Mari kita asumsikan Anda mengoperasikan aplikasi web, dan Anda ingin mendeteksi ketika salah satu pengguna Anda (dengan akun) beralih ke penelusuran pribadi. Saya menetapkan bahwa pengguna memiliki akun, karena strategi ini bergantung pada pelacakan berbagai bit data perilaku. Aspek penelusuran pribadi adalah (setidaknya dalam Firefox ): riwayat, entri formulir/pencarian, kata sandi, unduhan, cookie, cache, penyimpanan DOM. Saya tidak yakin bagaimana menyelidiki unduhan, tetapi saya pikir yang lain bisa diselidiki. Jika Anda mendapatkan deteksi positif pada mereka semua, kemungkinan besar pengguna Anda melakukan penjelajahan pribadi.

  • Dalam kasus sepele, Anda melacak (IP, user-agent) untuk setiap pengguna. Ketika Anda mendapatkan permintaan tanpa cookie untuk pencocokan (IP, UA) catatan, Anda dapat menyimpulkan bahwa pengguna yang bersangkutan adalah penjelajahan pribadi. Metode ini gagal (tidak ada deteksi) jika:

    1. Dia menggunakan sesuatu seperti ProxySwitchy atau TorButton untuk mengaktifkan Tor selama penjelajahan pribadi, sehingga mengubah IP.
    2. Ia beralih ke browser yang berbeda (mis. Biasanya menggunakan FF dan beralih ke Chrome untuk mode Penyamaran).
    3. Peralihan ke penjelajahan pribadi tidak langsung dan ISPnya telah mengeluarkan IP baru (mis. Pada hari Jumat dia 10.1.2.3, dia tidak menggunakan aplikasi Anda selama akhir pekan, dan pada hari Senin dia 10.1.4.5).

    Seperti disebutkan dalam jawaban Sonny Ordell , jika orang lain menggunakan browser yang sama dalam mode penjelajahan pribadi untuk mengakses akun terpisah di situs Anda, Anda akan mendapatkan deteksi - tetapi ini adalah kasus yang sedikit berbeda daripada jika pengguna "normal" hanya beralih ke mode penelusuran pribadi.

    Anda akan mendapatkan false-positive jika pengguna hanya menghapus cookie-nya untuk situs Anda, atau menggunakan profil sekunder (misalnya saya menyimpan beberapa profil Firefox yang berbeda dengan set plugin yang berbeda untuk pengujian tertentu dan/atau untuk menghindari pelacakan, meskipun saya Saya kira ini sangat tidak biasa).

  • Sebagai pemeriksaan yang lebih kompleks, Anda dapat menggunakan sesuatu seperti panopticlick EFF dan mempertahankan sidik jari peramban (atau kumpulan sidik jari) alih-alih hanya UA untuk setiap pengguna. Ini gagal dalam situasi 2 yang disebutkan di atas (mis. Jika pengguna secara eksklusif menggunakan FF untuk penjelajahan yang dapat diidentifikasi dan Chrome untuk penyamaran). Sidik jari akan jauh lebih generik (dan dengan demikian jauh kurang bermanfaat) jika pengguna menonaktifkan javascript. Sidik jari akan berubah jika pengguna secara selektif mengaktifkan javascript dalam sesi yang berbeda (mis. NoScript dengan situs yang diizinkan sementara).

  • Anda mungkin dapat mengalahkan edisi 1 (Tor) dengan mendeteksi akses melalui simpul keluar Tor, dan menggabungkan ini dengan sidik jari. Ini sepertinya hanya akan membantu dalam berbagai kasus.

  • Alih-alih hanya cookie untuk cek di atas, uji localStorage. Jika biasanya diaktifkan, dan kunci Anda tidak ada dalam penyimpanan untuk kunjungan ini, dan sidik jari cocok, maka ini mungkin penjelajahan pribadi. Jelas, jika pengguna biasanya memiliki penyimpanan dinonaktifkan, maka Anda tidak dapat menggunakannya. Mode kegagalan mirip dengan yang dijelaskan di atas untuk cookie.

  • Saya belum menguji atau mengembangkan ide itu, tapi saya kira Anda bisa bermain game dengan Cache-Control. (A quick search mengungkapkan bahwa ini bukan ide asli - bahwa proyek memiliki apa yang tampak seperti kode proof-of-concept.) Strategi ini gagal jika pengguna pergi melalui proxy caching bersama - halaman sementara menyebutkan anonymizer.com. Firefox, setidaknya, tidak menggunakan cache dalam mode penelusuran pribadi. (Lihat situs ini untuk demo pelacakan berbasis cache.) Jadi, Anda dapat menggabungkan ini dengan UA/sidik jari yang disebutkan di atas: jika pelacak cache Anda menunjukkan ini adalah kunjungan pertama, maka Anda dapat menebak bahwa pengguna menjelajah pribadi. Ini gagal dengan false positive jika pengguna membersihkan cache-nya; kombinasikan dengan teknik lain untuk mendapatkan tebakan yang lebih baik.

  • Anda dapat mendeteksi dan melacak, untuk setiap pengguna, apakah browser mengisi elemen formulir tertentu. Jika Anda mendeteksi bahwa pengguna yang diberikan tidak mendapatkan autofill pada elemen formulir itu, Anda dapat menyimpulkan penelusuran pribadi. Ini rapuh - mungkin pengguna tidak menggunakan komputer "primer" -nya, tetapi Anda dapat menggabungkannya dengan sidik jari seperti yang disebutkan di atas untuk perkiraan yang lebih andal.

  • Serangan timing saluran samping: mendeteksi dan melacak waktu khas yang dibutuhkan setiap pengguna untuk masuk ke aplikasi Anda. Akan ada variasi, tetapi saya menduga Anda bisa mendapatkan tebakan yang akurat tentang apakah seseorang menggunakan pengisian otomatis kata sandi. Jika pengguna biasanya menggunakan autofill kata sandi (mis. Transisi cepat melalui halaman login), dan kemudian untuk kunjungan yang diberikan (dengan sidik jari yang cocok) tidak menggunakan autofill, Anda dapat menyimpulkan penelusuran pribadi. Sekali lagi ini rapuh; kombinasikan dengan teknik lain untuk tebakan yang lebih baik. Anda juga ingin mendeteksi dan memperbaiki latensi jaringan pada pemuatan laman tertentu (mis. Mungkin jaringan pengguna lambat pada hari tertentu, dan transisi laman masuk lambat hanya latensi dan bukan kurangnya pengisian otomatis). Anda bisa sedikit jahat dan keluar otomatis dari pengguna (beri mereka pesan kesalahan palsu, "silakan coba lagi") untuk mendapatkan titik data kedua jika Anda sedikit mengganggu pengguna Anda.

  • Gabungkan ini dengan apa yang Anda sebutkan dalam pertanyaan tentang mendeteksi jika pengguna masuk ke layanan lain (mis. Facebook), dan Anda bisa lebih percaya diri dalam menebak.

  • Jika Anda benar-benar termotivasi, Anda bisa bermain game dengan DNS dan melacak waktu pemuatan halaman. Pengujian cepat FF 3.6 dan Chrome 15 tampaknya mengindikasikan bahwa tidak ada browser yang membersihkan cache DNS dalam mode penelusuran pribadi. Dan browser sama sekali tidak memiliki kendali atas cache DNS sistem lokal. Jika Anda menggunakan serangan timing DNS saluran-samping untuk melakukan pelacakan pengguna sebagai sidik jari alternatif (atau sebagai tambahan), Anda mungkin mendapatkan tebakan yang lebih andal. Saya tidak yakin seberapa akurat pelacakan melalui timing DNS.

Deteksi pengguna "anonim" dalam mode penjelajahan pribadi akan jauh lebih sulit, karena Anda belum memiliki kesempatan untuk mengumpulkan data tentang perilaku "khas" mereka. Dan, karena sebagian besar fitur hanya muncul ketika mereka mengakhiri sesi browser, Anda tidak benar-benar tahu apakah mereka akan kembali.

Dengan itu, berikut adalah ide untuk mendeteksi penjelajahan pribadi oleh pengguna anonim, jika Anda ingin menjadi jahat, dan Anda memiliki sumber daya yang Anda tahu pengguna bersedia memberi situs Anda kesempatan kedua, dan Anda dapat memaksa pengguna untuk mengaktifkan javascript. Lacak sidik jari, tetapkan cookie tetap, penyimpanan lokal, cache - apa pun yang dapat Anda lakukan untuk melacak pengguna. Jika ini adalah kunjungan pertama menurut sidik jari Anda, crash/hang browser melalui javascript (atau flash, atau trik jahat apa pun yang Anda tahu). Mengisap banyak memori, atau terjebak dalam satu lingkaran, atau apa pun yang diperlukan sehingga pengguna menutup browser. Kemudian ketika mereka kembali, Anda melihat (dari sidik jari) bahwa ini adalah kunjungan kedua. Jika cookie/storage/cache/etc tidak diatur, maka Anda dapat menyimpulkan bahwa sesi pertama adalah penjelajahan pribadi, dan saya kira Anda mungkin menyimpulkan bahwa sesi kedua mungkin juga penjelajahan pribadi. Ini jelas gagal jika pengguna tidak kembali, atau jika Anda tidak dapat crash/meyakinkan mereka untuk membunuh jendela browser. Sebagai bonus, jika Anda mengirimnya ke URL khusus, dan mereka berada dalam mode non-pribadi dan mengembalikan sesi penjelajahan maka Anda dapat menebaknya tidak dalam mode penjelajahan pribadi (kecuali mereka menandai URL).

Segala sesuatu di atas penuh lubang - banyak ruang untuk positif atau negatif palsu. Anda mungkin tidak akan pernah tahu apakah saya menggunakan penjelajahan pribadi, atau jika saya menjalankan browser di VM tanpa penyimpanan persisten. (Apa bedanya?)

Bagian terburuknya adalah bahwa jika Anda melakukan mendapatkan jawaban dengan metode yang dapat diandalkan untuk mendeteksi penelusuran pribadi adalah sepertinya tidak mungkin bertahan lama selama browser "memperbaikinya" atau pengguna menemukan solusi untuk menghindari deteksi.

30
bstpierre

Pemeriksaan penyimpanan lokal HTML 5 memungkinkan Anda mendeteksi mode penelusuran pribadi secara andal sekarang (2019). Ia bekerja dengan mencoba menulis kemudian membaca "Penyimpanan Lokal".

lihat:

https://Gist.github.com/jherax/a81c8c132d09cc354a0e2cb911841ff1

atau

https://github.com/jLynx/PrivateWindowCheck dengan PoC

  ------ edit to add functional description ----

Dari tautan jherax di atas:

...
    // **Firefox**
    if ('MozAppearance' in document.documentElement.style) {
      if (indexedDB === null) return yes();
      const db = **indexedDB.open**('test');
      db.onerror = yes;
      db.onsuccess = not;
      return void 0;
---

Dari jLynx di atas

...
        } else if(navigator.userAgent.includes("Firefox")){
            //Firefox
            var db = indexedDB.open("test");
            db.onerror = function(){resolve(true);};
            db.onsuccess =function(){resolve(false);};
---

Dalam kedua contoh, kegagalan untuk membuka penyimpanan lokal yang persisten, indexDB untuk Firefox, (didefinisikan oleh HTML 5) menunjukkan penjelajahan pribadi. Browser lain memanggil penyimpanan lokal dengan nama yang berbeda seperti localStorage, lanjutkan.

10
user10216038

Anda dapat menggunakan heuristik untuk membuat tebakan yang solid. Dalam IE10 dan IE11 (dan Safari, IIRC), misalnya, pengecualian yang diberikan ketika mencoba menggunakan IndexedDB sebagai petunjuk kuat bahwa browser adalah mode InPrivate.

Demikian pula, sistem DRM Adobe (digunakan oleh HBOGO, tampaknya) memunculkan kode kesalahan ketika browser adalah InPrivate/Incognito, karena "artefak lisensi" yang diperlukan tidak diizinkan untuk dibuat dalam mode pribadi. https://forums.Adobe.com/thread/1189199

8
EricLaw

Saya melihat ada hadiah karena Anda menginginkan jawaban yang lebih tepat dan terbaru, tetapi kebenarannya adalah bahwa jawaban yang tepat sudah diberikan oleh orang lain. Saya hanya bisa memberi Anda beberapa detail lagi, meskipun saya bukan pengembang JS dan saya tidak pernah tahu cara kerjanya.

Jawaban singkatnya adalah: mereka menggunakan JavaScript untuk mengimplementasikan beberapa jenis heuristik yang terutama memeriksa apakah ada fungsionalitas yang tersedia atau tidak.

Lihatlah bostonglobe.com Misalnya. Klik sebuah artikel saat dalam mode privat, dan Anda akan melihat pemberitahuan: "Anda dalam mode privat, dll.". Jika Anda menonaktifkan JavaScript, pemberitahuan itu tidak akan muncul, yang artinya dilakukan di JS. Hal yang sama berlaku jika Anda pergi ke New York Times, itu hanya JS. Tetapi bagaimana mereka melakukannya? Pada bostonglobe.com Saya menemukan kode dalam file JS bernama meter.js Di sumber. Jika Anda mencari dalam kode itu untuk detectPrivateMode Anda akan melihat fungsi yang digunakannya. Ini diperkecil, jadi sulit untuk membaca. Namun, memurnikan sumber di perangkat dev browser memberikan kode berikut:

detectPrivateMode: function (t) {
  var e;
  if (window.webkitRequestFileSystem) window.webkitRequestFileSystem(window.TEMPORARY, 1, function () {
    e = !1
  }, function (t) {
    console.log(t),
    e = !0
  });
   else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {
    var i;
    try {
      i = window.indexedDB.open('test')
    } catch (t) {
      e = !0
    }
    void 0 === e && n(function () {
      return 'done' === i.readyState
    }, function (t) {
      t || (e = !i.result)
    })
  } else if (r(window.navigator.userAgent)) {
    e = !1;
    try {
      window.indexedDB || (e = !0)
    } catch (t) {
      e = !0
    }
  } else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {
    if (window.safariIncognito) e = !0;
     else {
      try {
        window.openDatabase(null, null, null, null)
      } catch (t) {
        e = !0
      }
      try {
        window.localStorage.setItem('test', 1)
      } catch (t) {
        e = !0
      }
    }
    void 0 === e && (e = !1, window.localStorage.removeItem('test'))
  }
  n(function () {
    return void 0 !== e
  }, function (n) {
    t(e)
  })
}

Anda dapat melihat misalnya bahwa mereka mencoba menggunakan window.webkitRequestFileSystem, Di Firefox mereka akan mencoba window.indexedDB.open('test'), di Safary window.openDatabase, Dan seterusnya. Semua fungsi tersebut tampaknya bergantung pada fakta bahwa mereka berperilaku berbeda dalam mode privat (mode penyamaran). Sebagian besar kode tampaknya menggunakan fungsi yang terkait dengan penyimpanan lokal, yang tampaknya berperilaku berbeda dari pada mode normal. Ada beberapa blok coba-tangkap, sehingga sebagian besar fungsi itu mungkin bahkan tidak tersedia dalam mode pribadi. Jika Anda Google salah satu dari fungsi-fungsi tersebut (mungkin juga menambahkan "pribadi" atau "penyamaran" dalam pencarian) Anda akan menemukan banyak hasil yang membahas cara-cara yang mungkin untuk mendeteksi mode pribadi, dan pada akhirnya kode yang akan Anda temukan akan terlihat sangat mirip dengan yang saya kutip. Anda akan menemukan beberapa pertanyaan di StackExchange dan juga cuplikan kode GitHub. Misalnya, jawaban di StackExchange ini memiliki beberapa informasi menarik: https://stackoverflow.com/a/4132218

Di New York Times, jika Anda mengklik sebuah artikel, buka sumber HTML, dan cari webkitRequestFileSystem, Anda akan menemukan kode yang sama.

Seperti yang Anda lihat, mungkin ada beberapa perbedaan dalam kode dan heuristik yang mereka gunakan, tetapi setiap situs web kemungkinan mendeteksi mode pribadi dengan mengandalkan serangkaian fungsi yang sama.

6
reed

Tampaknya ada beberapa cara yang dapat dideteksi situs web saat Anda berada dalam mode Penjelajahan Pribadi, ntuk Safari desktop dan Safari seluler .

Desktop Safari tidak meminta favicons ketika dalam mode Penjelajahan Pribadi, yang memberikan segalanya. Ini juga memiliki perbedaan lainnya .

Mobile Safari tidak mendukung penyimpanan lokal HTML5 ketika dalam mode Penjelajahan Pribadi, yang juga dapat dideteksi oleh situs web.

3
D.W.

Pada Maret 2020, tampaknya masih mungkin bagi situs untuk mendeteksi apakah Firefox berjalan dalam mode privat atau tidak, berdasarkan fakta bahwa IndexedDB tidak berfungsi ketika Firefox berjalan dalam mode privat. Ada sejumlah outlet media arus utama yang tampaknya menggunakan teknik ini untuk memblokir pengguna dari meramban situs mereka dalam mode pribadi, atau memaksa mereka untuk masuk.

GitHub Gist dengan kode sampel:
(https://Gist.github.com/jherax/a81c8c132d09cc354a0e2cb911841ff1

Demo kerja kode di atas:
(https://output.jsbin.com/tazuwif

Utas Bugzilla dengan info lebih lanjut:
(https://bugzilla.mozilla.org/show_bug.cgi?id=781982
(https://bugzilla.mozilla.org/show_bug.cgi?id=150668

1
mti2935

Jawaban sederhananya adalah tidak.

Hanya mendeteksi bahwa riwayat tidak disimpan tidak berarti bahwa mode penjelajahan pribadi sedang digunakan, itu hanya berarti bahwa riwayat tidak disimpan, sesuatu yang mudah dikonfigurasikan di browser apa pun.

Mengapa masuk ke layanan lain berarti Anda tidak menggunakan mode penelusuran pribadi? Saya sering menggunakan Facebook dalam mode penjelajahan pribadi di komputer orang lain, karena itu berarti saya tidak harus keluar dan itu adalah cara mudah untuk memiliki sesi saya sendiri tanpa kehilangan status mereka.

Mode penjelajahan pribadi hanya mengaktifkan fitur yang dapat Anda konfigurasi untuk diri Anda sendiri dalam mode normal. Ini memungkinkan beberapa fitur sekaligus untuk periode waktu sementara untuk kenyamanan. Tidak ada cara untuk mengetahui apakah seseorang menggunakan mode penjelajahan pribadi atau mereka hanya mengaktifkan fitur-fitur itu.

0
Sonny Ordell