Menghitung tanpa cookie
Penghitung pengunjung punya satu tugas yang rumit: ia harus bisa membedakan dua kunjungan. Jika tidak bisa, satu orang yang memuat ulang halaman sepuluh kali akan terlihat seperti sepuluh orang, dan angka di situs itu hanyalah fiksi.
Solusi yang lazim adalah cookie. Situs ini tidak menggunakannya. Berikut ini apa yang dilakukannya sebagai gantinya, dan mengapa kalimat itu baru bisa diucapkan dengan jujur setelah melalui cukup banyak pekerjaan.
Cookie yang tidak diminta siapa pun
Hingga tahun ini, setiap permintaan ke penghitung memulai sebuah sesi PHP. Itu hanya satu baris kode, tampak tidak berbahaya, dan itu berarti bahwa setiap pengunjung di setiap situs yang memakai penghitung Stats4U menerima cookie sesi — dipasang oleh kami, di halaman milik orang lain, tanpa disengaja oleh kedua pihak.
Sesi itu tidak pernah dipakai untuk apa pun. Buktinya mudah ditemukan begitu ada yang memeriksa: direktori tempat sesi disimpan berisi nol berkas. Selama bertahun-tahun, sesi itu memasang cookie di situs web orang lain untuk menampung data yang tidak pernah ditulis dan tidak pernah dibaca.
Sesi itu kini sudah dihapus dari jalur penghitungan. Sesi hanya dimulai ketika seseorang membuat atau mengatur ulang sebuah penghitung — tindakan yang mereka lakukan dengan sengaja, di situs ini.
Penggantinya
Pengunjung dibedakan dengan sebuah hash. Lima hal dimasukkan ke dalamnya:
- alamat IP
- user agent
- ID penghitung
- tanggal hari ini
- sebuah rahasia yang berubah setiap hari
Hasilnya 16 byte, dan itulah yang disimpan. Nilai itu disimpan selama dua hari lalu dihapus. Alamat IP itu sendiri tidak pernah dicatat sama sekali.
Dua kunjungan dari orang yang sama pada hari yang sama ke penghitung yang sama menghasilkan 16 byte yang sama, sehingga kunjungan kedua dikenali sebagai kunjungan ulang. Besok, orang yang sama menghasilkan sesuatu yang sama sekali berbeda, karena tanggal dan rahasianya sudah berubah. Itulah seluruh mekanismenya.
Mengapa rahasianya berganti
Inilah bagian yang mudah keliru, dan di sini pun keliru hingga tahun ini.
Versi lama memakai satu rahasia permanen. Cara itu tetap menghasilkan hash yang berbeda untuk orang yang berbeda, dan kedengarannya tidak masalah. Namun, itu berarti siapa pun yang memegang rahasia tersebut dapat mengambil alamat IP yang dicurigai dan menghitung ulang hash-nya untuk hari mana pun di dalam arsip — mengubah tabel berisi nilai anonim 16 byte kembali menjadi catatan tentang siapa mengunjungi apa, sejauh data itu tersedia ke belakang.
Kini rahasianya berganti setiap hari dan rahasia lama dihapus setelah dua hari. Setelah itu terjadi, perhitungan tersebut tidak dapat dijalankan lagi oleh siapa pun. Termasuk oleh pengelola situs ini, dan justru itulah intinya: perlindungan yang bergantung pada iktikad baik pengelola bukanlah perlindungan, melainkan janji.
Resolusi layar, dan pelajaran tentang menghapus sesuatu
Resolusi layar dulu dikumpulkan. Itu adalah sinyal klasik untuk fingerprinting dan manfaatnya tidak sebanding dengan harganya, jadi pengumpulan itu dihapus dari skrip yang berjalan di halaman penyemat.
Itu belum cukup, dan alasannya perlu diketahui oleh siapa pun yang membuat sesuatu untuk situs web orang lain. Skrip itu disajikan dengan masa berlaku cache tujuh hari, sehingga salinan lama tetap aktif di browser pengunjung selama seminggu setelah perubahan. Lebih buruk lagi, sebagian situs sama sekali tidak menautkan skrip itu — mereka menempelkan salinannya ke halaman mereka sendiri bertahun-tahun lalu, dan salinan itu akan terus melakukan persis apa yang dilakukannya pada hari ditempelkan, selamanya.
Jadi, data resolusi terus berdatangan. Perbaikannya adalah membuat server menolak nilai tersebut, siapa pun pengirimnya. Menghapus pengumpulan data dari klien hanya menghentikan klien baru. Menghapusnya dari server menghentikannya seketika.
Memeriksanya
Semua ini tidak banyak artinya jika hanya berupa klaim, jadi inilah perintahnya:
- curl -sk -D - -o /dev/null 'https://www.stats4u.net/index.php?action=pic&s4uid=1' | grep -i set-cookie
Jika tidak ada keluaran, berarti tidak ada cookie yang dipasang.
Satu peringatan sebagai penutup, sama seperti biasanya: tulisan ini menjelaskan apa yang dilakukan perangkat lunak ini. Apakah itu memenuhi aturan yang berlaku di suatu negara adalah pertanyaan bagi orang yang berkompeten menjawabnya, dan tulisan ini bukanlah jawaban tersebut.