Код:
//==============================================================================
class test_proxy
{
var $bad_proxy=0;
//-------------------------------------------
// Check User IP for anonymous proxy
//-------------------------------------------
function clean_value_back($val) {
// вот здесь должна быть проверка на анонимность прокси!!!
if ($ibforums->input['BAD_PROXY']=='YES')
{
$this->unload_member();
$this->session_id=0;
return 1;
}else{
if ($ibforums->input['act'] != 'Login')
{
global $proxy_check;
Ищем:
Код:
//-------------------------------------------------
// Do we have a valid session ID?
//-------------------------------------------------
сразу же после этого добавляем:
Код:
if ($ibforums->input['BAD_PROXY'] == 'YES')
{
$this->unload_member();
}
// ================================================================================
Если мы уж хотим полностью закрыть доступ анонимным проксям, то тогда делаем так:
Файл: /sources/functions.php
находим и комментируем следующее:
Код:
//-----------------------------------------
// If we're a guest, show the log in box..
//-----------------------------------------
/*
if ($ibforums->member['id'] == "" and $error['MSG'] != 'server_too_busy' and $error['MSG'] != 'account_susp')
{
$html = str_replace( "", $skin_universal->error_log_in($QUERY_STRING), $html);
}
*/
//-----------------------------------------
// Do we have any post data to keepy?
//-----------------------------------------
ВСЕ! Кроме сообщения об ошибке, человек пришедший из-за искажающей или анонимной прокси ничего не увидит
В принципе на этот код может наворачиваться что угодно, но основное решение такое.
Единственным минусом такого кода может быть только то, что если у клиента установлен некий Web сервер на компьютере, то он будет так же опрашиваться...
Как ускорить проверку? Если же нас интересуют только АНОНИМНЫЕ прокси, а не ИСКАЖАЮЩИЕ, то надо изменить:
Код:
function check_anonymous_proxy($show=0)
{
// Порты для проверки 80,8080,3128
global $_SERVER, $sess;
$ip = $_SERVER["REMOTE_ADDR"];
if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) return 0; //$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
при таком изменении мы анализируем только адрес для Direct Connection, собственно как и поступает анонимный прокси - он выдает себя за клиента идущего на сайт БЕЗ ПРОКСИ СЕРВЕРА.
Дополнение:
Для теста можно использовать анонимный прокси: smtpmail.loginsoft.com:80