Μέτρηση χωρίς cookie
Ένας μετρητής επισκεπτών έχει μια δύσκολη δουλειά: πρέπει να ξεχωρίζει δύο επισκέψεις μεταξύ τους. Αν δεν μπορεί, τότε ένας άνθρωπος που ανανεώνει μια σελίδα δέκα φορές μοιάζει με δέκα ανθρώπους, και ο αριθμός στον ιστότοπο είναι μυθοπλασία.
Η συνηθισμένη λύση είναι ένα cookie. Αυτός ο ιστότοπος δεν χρησιμοποιεί κανένα. Ακολουθεί τι κάνει αντί γι' αυτό, και γιατί χρειάστηκε κόπος για να μπορεί η πρόταση αυτή να ειπωθεί με ειλικρίνεια.
Το cookie που δεν ζήτησε κανείς
Μέχρι φέτος, κάθε αίτημα προς τον μετρητή ξεκινούσε μια συνεδρία PHP. Πρόκειται για μία γραμμή κώδικα, μοιάζει ακίνδυνη, και σήμαινε ότι κάθε επισκέπτης κάθε ιστοτόπου που χρησιμοποιούσε μετρητή Stats4U λάμβανε ένα cookie συνεδρίας – που το ορίζαμε εμείς, στη σελίδα κάποιου άλλου, χωρίς να το θέλει καμία από τις δύο πλευρές.
Η συνεδρία δεν χρησιμοποιήθηκε ποτέ για τίποτα. Η απόδειξη βρέθηκε εύκολα μόλις κοίταξε κάποιος: ο κατάλογος όπου αποθηκεύονται οι συνεδρίες περιείχε μηδέν αρχεία. Επί χρόνια έβαζε ένα cookie στους ιστοτόπους άλλων ανθρώπων, για να κρατά δεδομένα που ποτέ δεν γράφτηκαν και ποτέ δεν διαβάστηκαν.
Έχει αφαιρεθεί από τη διαδρομή μέτρησης. Μια συνεδρία ξεκινά πλέον μόνο όταν κάποιος δημιουργεί ή ρυθμίζει εκ νέου έναν μετρητή – μια ενέργεια που κάνει σκόπιμα, σε αυτόν τον ιστότοπο.
Τι μπήκε στη θέση του
Οι επισκέπτες διακρίνονται μεταξύ τους με ένα hash. Σε αυτό μπαίνουν πέντε στοιχεία:
- η διεύθυνση IP
- ο user agent
- ο αριθμός μετρητή
- η σημερινή ημερομηνία
- ένα μυστικό που αλλάζει κάθε μέρα
Το αποτέλεσμα είναι 16 byte, και αυτά αποθηκεύονται. Διατηρούνται δύο ημέρες και στη συνέχεια διαγράφονται. Η ίδια η διεύθυνση IP δεν καταγράφεται ποτέ, σε κανένα σημείο.
Δύο επισκέψεις του ίδιου ανθρώπου την ίδια ημέρα στον ίδιο μετρητή παράγουν τα ίδια 16 byte, οπότε η δεύτερη αναγνωρίζεται ως επανάληψη. Την επόμενη μέρα ο ίδιος άνθρωπος παράγει κάτι εντελώς διαφορετικό, επειδή έχουν αλλάξει και η ημερομηνία και το μυστικό. Αυτός είναι όλος ο μηχανισμός.
Γιατί το μυστικό αλλάζει
Αυτό είναι το σημείο όπου είναι εύκολο να γίνει λάθος, και εδώ ήταν λάθος μέχρι φέτος.
Η παλιά έκδοση χρησιμοποιούσε ένα μόνιμο μυστικό. Αυτό εξακολουθούσε να παράγει διαφορετικά hash για διαφορετικούς ανθρώπους, κάτι που ακούγεται εντάξει. Σήμαινε όμως ότι όποιος είχε αυτό το μυστικό μπορούσε να πάρει μια ύποπτη διεύθυνση IP και να υπολογίσει ξανά το hash της για οποιαδήποτε ημέρα του αρχείου – μετατρέποντας έναν πίνακα ανώνυμων τιμών 16 byte ξανά σε καταγραφή του ποιος επισκέφθηκε τι, όσο πίσω έφταναν τα δεδομένα.
Το μυστικό αλλάζει πλέον καθημερινά και τα παλιά διαγράφονται μετά από δύο ημέρες. Από τη στιγμή που συμβεί αυτό, ο υπολογισμός δεν μπορεί πια να γίνει από κανέναν. Αυτό περιλαμβάνει και όποιον διαχειρίζεται αυτόν τον ιστότοπο, και αυτό ακριβώς είναι το ζητούμενο: μια προστασία που εξαρτάται από την καλή συμπεριφορά του διαχειριστή δεν είναι προστασία, είναι υπόσχεση.
Η ανάλυση οθόνης, και ένα μάθημα για τη διαγραφή
Παλιότερα συλλεγόταν η ανάλυση οθόνης. Είναι κλασικό σήμα για τη δημιουργία ψηφιακού αποτυπώματος (fingerprinting) και δεν άξιζε το κόστος της, γι' αυτό αφαιρέθηκε από το script που εκτελείται στη σελίδα ενσωμάτωσης.
Αυτό δεν ήταν αρκετό, και ο λόγος αξίζει να τον γνωρίζει όποιος φτιάχνει πράγματα για τους ιστοτόπους άλλων. Το script σερβίρεται με διάρκεια cache επτά ημερών, οπότε παλιά αντίγραφα έμειναν ενεργά στα προγράμματα περιήγησης των επισκεπτών για μια εβδομάδα μετά την αλλαγή. Ακόμη χειρότερα, ορισμένοι ιστότοποι δεν συνδέονται καθόλου με το script – επικόλλησαν ένα αντίγραφό του στις δικές τους σελίδες πριν από χρόνια, και αυτό το αντίγραφο θα συνεχίζει να κάνει ακριβώς ό,τι έκανε τη μέρα που επικολλήθηκε, για πάντα.
Έτσι, η ανάλυση συνέχισε να φτάνει. Η λύση ήταν να απορρίπτει ο διακομιστής την τιμή, ανεξάρτητα από το ποιος τη στέλνει. Η αφαίρεση μιας συλλογής δεδομένων από την πλευρά του πελάτη (client) σταματά μόνο τους νέους πελάτες. Η αφαίρεσή της από τον διακομιστή τη σταματά αμέσως.
Έλεγχος
Τίποτα από αυτά δεν αξίζει πολλά ως απλός ισχυρισμός, οπότε ορίστε η εντολή:
- curl -sk -D - -o /dev/null 'https://www.stats4u.net/index.php?action=pic&s4uid=1' | grep -i set-cookie
Αν δεν εμφανιστεί τίποτα, δεν ορίστηκε κανένα cookie.
Μια τελευταία επιφύλαξη, η ίδια όπως πάντα: εδώ περιγράφεται τι κάνει το λογισμικό. Αν ικανοποιεί τους κανόνες που ισχύουν σε μια συγκεκριμένη χώρα είναι ερώτημα που πρέπει να απαντήσει κάποιος αρμόδιος, και το παρόν δεν είναι εκείνη η απάντηση.
Ενημέρωση, 11 Σεπτεμβρίου 2026: Από τις 27 Αυγούστου 2026 το script διάβαζε ξανά την ανάλυση οθόνης, το πλάτος του παραθύρου του προγράμματος περιήγησης και την αναλογία pixel, σε κάθε ιστότοπο που το είχε ενσωματώσει. Από τις 11 Σεπτεμβρίου 2026 το κάνει μόνο όπου ο ιδιοκτήτης του ιστοτόπου το ενεργοποιεί με data-screen="1". Χωρίς αυτό το χαρακτηριστικό, το τρέχον script δεν διαβάζει κανένα από τα τρία, και ο διακομιστής δεν τα αποθηκεύει πλέον ούτε από παλαιότερα αντίγραφα.