Při kontrole unikátnosti návštěvníka nakonec skončíme u kontroly IP adresy. Problém je, že IP adresa návštěvníka se za určitých okolností může měnit. Týká se to především anonymizační sítě Tor. Tato síť naštěstí nabízí možnost zjistit, zda požadavek přišel z ní.
Poněkud neobvyklý způsob zjištění využívá DNS dotaz na speciální adresu. Pokud tento dotaz vrátí IP adresu z rozsahu 127/8 kromě 127.0.0.1, tak požadavek přišel ze sítě Tor, jinak ne. V PHP kódu se to dá zapsat takto:
<?php /** Obrácení pořadí prvků v IP adrese * @param string * @return string */ function reverse_ip($ip) { return implode(".", array_reverse(explode(".", $ip))); } /** Zjištění, zda je IP adresa součástí sítě Tor * @param string IP adresa vzdáleného počítače * @return bool * @copyright Jakub Vrána, https://php.vrana.cz/ */ function is_tor($ip) { $hostname = reverse_ip($ip) . ".$_SERVER[SERVER_PORT]." . reverse_ip($_SERVER["SERVER_ADDR"]) . ".ip-port.exitlist.torproject.org"; $addr = gethostbyname($hostname); return ($addr != $hostname && $addr != "127.0.0.1" && ip2long($addr) >> 24 == 127); } // použití is_tor($_SERVER["REMOTE_ADDR"]); ?>
Mnohem elegantnější a efektivnější možností (i když těžko dohledatelnou) je použít hromadný seznam Tor adres.
U kontroly hlasování v anketě bych povolil např. jen 1 % požadavků ze sítě Tor každou hodinu (pokud má Tor 200 tisíc uživatelů a Internet 1.67 miliardy, tak uživatelů Toru je asi 0.01 %, takže 1 % poskytuje dostatečnou rezervu).
Diskuse je zrušena z důvodu spamu.