Какой современный способ проверить, запрашивает ли пользователь сайт с помощью Tor? (РНР)

Я пробовал много способов, но все они не работают для меня, я думаю, что они устарели, и все изменилось. Может быть, кто-то может посоветовать мне направление раскопок?

3

Решение

Я являюсь автором библиотеки PHP под названием TorUtils это обеспечивает ряд классов, связанных с Tor и реле.

Один из классов, который это обеспечивает, TorDNSEL пример который дает вам простой интерфейс для запроса списка выхода Tor DNS, чтобы определить, является ли удаленный IP-адрес Tor-ретранслятором, обращающимся к вашему сайту.

Использование простое:

<?php

use Dapphp\TorUtils\TorDNSEL;

require_once 'src/TorDNSEL.php';

try {
$isTor = TorDNSEL::IpPort(
$_SERVER['SERVER_ADDR'],
$_SERVER['SERVER_PORT'],
$_SERVER['REMOTE_ADDR']
);
var_dump($isTor); // true or false
} catch (\Exception $ex) {
echo $ex->getMessage() . "\n"; // could be DNS time out, or other network issue
}

TorDNSEL Скрипт не требует каких-либо других классов и может быть загружен и использован как автономный скрипт. Он делает запрос DNS, но создает его напрямую, поэтому вам также не нужны никакие функции DNS или библиотеки, доступные для PHP.

В качестве альтернативы я использую ControlClient класс для поддержания очень свежих списков выхода. С его помощью вы можете создавать свои собственные списки (для подключения вам понадобится собственный ретранслятор Tor, или вы можете использовать органы каталогов для создания списков). Еще проще, просто периодически скачивайте и проверяйте списки выхода, которые я экспортирую Вот. Список обновляется каждые 10 минут, поэтому старайтесь не загружать его чаще, чем раз в 10 минут или около того.

Затем сохраните его где-нибудь на своем сайте и сравните IP-адрес клиента с теми, которые указаны в списке.

Вы можете скачать исходники с GitHub или composer require dapphp/torutils установить в существующий проект.

Надеюсь, это поможет, дайте мне знать, если я могу ответить на что-нибудь еще.

2

Другие решения

Использование check.torproject.org

Для каждого пользователя, который посещает веб-сайт, мы проверяем, соответствует ли его IP-адрес известному IP-адресу выходного узла и разрешает ли его политика выхода доступ к этому веб-сайту через порт 443 (HTTPS). Если это так, то мы можем сделать хорошее предположение, что пользователь успешно подключился через сеть Tor.

Вы можете найти его источник на https://git.torproject.org/check.git. Это под лицензией MIT. Ты можешь использовать Exits.IsTor в datastore.go, чтобы определить, приходит ли запрос от tor. Вам нужно изменить

var DefaultTarget = AddressPort{"38.229.72.22", 443}

на IP-адрес и порт вашего сервера. Вам также понадобится некоторый интерфейс, написанный на Go, если вы используете PHP, если вы хотите использовать их код.

Если вы используете Cloudflare, он использует двухбуквенный код «T1» для Tor, и вы можете иметь собственные правила для Tor.

Обратите внимание, что трудно отличить запрос напрямую от узла выхода Tor (не через Tor) от запроса от Tor. Большинство мест предполагают, что все они из Тор.

0

По вопросам рекламы [email protected]