Wie sichert man einen Hitcounter ab?
Hi liebe Foristen,
ich überlege mir auf meiner Homepage einen Hitcounter einzubauen, ähnlich dem hier bei den Fragen nur will ich, dass man den nicht durch einfaches Neuladen in die Höhe treiben kann.
Ich bin relativ neu was Webseiten angeht deshalb frage ich euch, wie könnte man so einen bulletprofed Hitcounter basteln, der nicht "betrogen" werden kann oder eben nur sehr schwer?
Ich kenen z.B. Cookies oder Sessions (auch wenn mir nicht ganz klar ist wie die funktionieren) oder das Protokollieren der IP Nummern.
Welcher Weg wäre also praktikabel?
cu Hitcounter
Antwort schreiben
Antwort 1 von Supermax vom 21.03.2021, 20:59 Options
Mal was einfaches mit Sessions
<?php
session_start();
if (!$_SESSION['counted']) {
// Zähler in Datei/Datenbank erhöhen
$_SESSION['counted'] = true;
}
// rest der Seite
Das reicht um einfache Reloads zu verhindern, es sei denn der Angreifer
- löscht nach jedem Aufruf den Session-Cookie von deiner Seite bzw.
- entfernt jedes mal den PHPSESSID-Parameter aus der URL
Und ich glaube mal daß sich niemand längere Zeit diese Mühe machen wird.
Antwort 2 von son_quatsch vom 24.03.2021, 08:06 Options
IPs zu speichern ist nicht das schlauste - stellt euch einen Proxy vor, hinter dem dutzende anderer Rechner wären: besucht einer, gelten alle sofort als "gezählt". Ähnlich mit Providern mit dynamischer IP-Vergabe: vor 30min kann die IP des Besuchers noch eine ganz andere sein als jetzt.
Ach ja: spätestens die Suchmaschinen kümmern sich einen feuchten Dreck um Cookies und/oder SID-Parameter. Die meisten "Hits" kleiner Seiten bestehen nämlich gar nicht aus Besuchern, sondern aus Crawlern.
Antwort 3 von Supermax vom 24.03.2021, 08:33 Options
Crawler bekannter Suchmaschinen wie Google, Yahoo, Microsoft, CUIL etc. kann man aber relativ einfach anhand der "User-Agent" Angabe und/oder der IP-Adresse ausfiltern; das kann sogar schon durch den Webserver geschehen, bevor das Script / die Seite überhaupt aufgerufen wird, etwa über mod_rewrite.
Schon eine einfache Überprüfung, ob der User-Agent das Wort "bot" enthält, reicht für simplere Anwendungen aus.
<?php
session_start();
if (stripos($_SERVER['HTTP_USER_AGENT'],'bot')===false) {
if (!$_SESSION['counted']) {
// Zähler in Datei/Datenbank erhöhen
$_SESSION['counted'] = true;
}
}
// rest der Seite
Die 3 === sind übrigens kein Tippfehler, das dient dazu um den Rückgabewert "false" (Teilzeichenkette nicht gefunden) vom Rückgabewert "0" (Teilzeichenkette an Position 0 gefunden) zu unterscheiden.