SOCL.cz
blog nejen o Internetu

Detekce IP adresy sítě TOR v PHP

publikováno 14. 2. 2015 v 20:29

V důsledku enormního nárůstu komentářového spamu u jednoho svého staršího projektu jsem se rozhodl zablokovat všechny přispěvatele, kteří přichází přes anonymizační síť TOR - řešení v PHP je jen na pár řádek.

Nikdy bych si nepomyslel, že někdy budu TOR na některém svém webu blokovat, protože jsem dlouholetým spokojeným uživatelem zmíněné anonymizační sítě a mám k ní pozitivní vztah. Ale co je moc, to je moc. Napsat si funkci, která kontroluje, zda je návštěvník připojen přes TOR, může vypadat třeba následovně:

function is_tor($ip) {
    $server_ip = '123.123.123.123';  // IPv4 adresa vašeho serveru, já díky reverznímu proxy nemohu použít $_SERVER['SERVER_ADDR'] a proto si IP nadefinuju ručně
    $query = implode('.', array_reverse(explode('.',  $ip))).'.'.$_SERVER['SERVER_PORT'].'.'.implode('.', array_reverse(explode('.', $server_ip))).'.ip-port.exitlist.torproject.org';
    $addr = gethostbyname($query);
    if ($addr != $query && $addr != '127.0.0.1' && substr($addr, 0, 3) == '127') return true;
        else return false;
}

if(is_tor($_SERVER['REMOTE_ADDR'])) die('No more spam!');

Dotazujeme se veřejné služby TorDNSEL, která slouží jako DNS-based seznam exit nodů sítě TOR. Pro sestavení dotazu potřebujeme IP adresu našeho serveru, dále port, na kterém náš webový server běží a IP adresu, na kterou se ptáme (připomínám, že pracujeme s IPv4 adresami). Pokud obdžíme odpověď, která začíná 127 a současně neodpovídá 127.0.0.1, patří IP adresa do sítě TOR a vy ji můžete zablokovat nebo omezit.

 

štítky: anonymita bezpečnost internet php relay spam tor
2304x přečteno

Komentáře k článku (0)

Zatím nikdo nic nenapsal, chcete být první?
Vaše jméno/přezdívka: (max 40 znaků)

Web: (nepovinné, max 100 znaků)

Opiště sekvenci znaků:

captcha!

Zde napište komentář: (max 512 znaků)

Copyright © 2015-2018 SOCL.cz, RSS 2.0 RSS kanál blogu
Všechna práva vyhrazena, nebo tak nějak. Kontakt: mujblog(na)socl.cz

WEDOS BANNER