Я делаю вход в Facebook, используя cURL, и я использую прокси-сервер TOR для этого входа. Вот мой код:
function loginOnFacebook($login_email, $login_pass)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://m.facebook.com/login.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Proxy configuration, very important!
if(isset($params['t']))
{
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:9050");
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
}
curl_setopt($ch, CURLOPT_POSTFIELDS,'charset_test=€,´,€,´,水,Д,Є&email='.urlencode($login_email).'&pass='.urlencode($login_pass).'&login=Login');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Charset: utf-8','Accept-Language: en-us,en;q=0.7,bn-bd;q=0.3','Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'));
curl_setopt($ch, CURLOPT_COOKIEFILE, getcwd ());
curl_setopt($ch, CURLOPT_COOKIEJAR, getcwd ());
curl_setopt($ch, CURLOPT_USERAGENT, "user_agent");
curl_setopt($ch, CURLOPT_REFERER, "http://m.facebook.com");
$fbMain = curl_exec($ch) or die(curl_error($ch));
$url = 'https://m.facebook.com/home.php?refid=18';
curl_setopt($ch, CURLOPT_URL, $url);
$demo_mac=curl_exec($ch);
$effectiveUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
if($effectiveUrl == $url)
return true;
else
return false;
}
Вы можете видеть, что я проверяю $param -t
использовать прокси-сервер TOR через порт 9050.
Это работает, я проверяю так:
for($i = 0; $i <= 50; $i++)
{
$ch = curl_init('http://icanhazip.com/');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
if(isset($params['t']))
{
curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:9050");
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
}
$myIp = curl_exec($ch) or die(curl_error($ch));
print($myIp);
}
Этот код проверит мой публичный IP на http://icanhazip.com/
и распечатай его мне, и он работает, я получаю TOR IP.
Но, когда я пытаюсь войти на Facebook с помощью этой системы, я все еще получаю свой реальный IP-адрес.
Может ли кто-нибудь помочь мне определить, что происходит?
Исторически каждый бит информации использовался для повторной идентификации пользователя. Я с сердцем, Google даже работал над логином без пароля: в зависимости от поведения пользователей. Короче говоря: мы не настолько автономны, как мы думали, но в какой-то степени предсказуемы. Что бы вы не хотели делать дальше: имейте в виду, что для идентификации пользователей используются не только строки запроса, IP-адреса и имена браузеров, но также привычки, скорость набора, время пинга и так далее. На самом деле существует так много способов, что даже после того, как ваш скрипт заработает, он потребует регулярных проверок безопасности, чтобы держать его в курсе развития таких методов. Я не вижу никаких проблем с вашим кодом, поэтому я предполагаю, что это связано с нетрадиционными технологиями.
Из истории в будущее: у нас есть несколько новых битов в протоколе SSL, которые специально не созданы для управления сессиями, но могут предложить такую возможность в качестве побочного эффекта. Ни один из тех, что я видел, не реализован, но я считаю, что сшивание OCSP и ALPN являются хорошими кандидатами.
Первый и менее вероятный мне кажется OCSP, который «кэширует» ssl-сертификат, чтобы сервер знал, что ваш клиент был там. Если Facebook контролирует центр сертификации, он может просто сохранить ваш адрес и использовать его всякий раз, когда вы используете ваш кешированный сертификат. Ssa;)
Во-вторых, есть ALPN, который позволяет использовать http2 и переключаться на другой протокол, например UDP, и это не будет работать с вашим локальным TOR (https://www.whonix.org/wiki/Tunnel_UDP_over_Tor). Может быть возможно установить второе соединение через UDP, чтобы полностью обойти ваш прокси. Поэтому я бы попытался отключить ALPN сейчас с curl_setopt($ch, CURLOPT_SSL_ENABLE_ALPN, 1);
— Срю гугл;)
Я могу только надеяться, что это поможет вам, потому что я не пробовал. В любом случае вы должны прочитать, понять и вручную установить каждую опцию setopt и никогда не доверять значениям по умолчанию, чтобы быть на максимально возможной стороне. Это связано с тем, что зависимости curl, такие как libssl, всегда могут использовать файлы конфигурации и кэши самостоятельно. Так что даже проверки всех параметров скручивания, но и тех, которые они используют, будет недостаточно. С другой стороны, параметры curl являются наилучшей отправной точкой, потому что они позволяют отключить ненужные функции curl, что я бы поэтому сделал как можно лучше.
Других решений пока нет …