AlexXF Опубликовано 4 Сентября 2003 Жалоба Поделиться Опубликовано 4 Сентября 2003 Задача - есть юзер, который выходил с одного IP (сразу видно, выделенка дома). Затем его забанили по IP. Так он теперь ходит через анонимки... Как быть? Предлагать забанить его по е-мейлу - тоже не надо. BTW, есть большущая база бесплатных е-мейлов - можно отсекать халявный е-мейл, не проблема... Но как же быть то с IP ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 4 Сентября 2003 Жалоба Поделиться Опубликовано 4 Сентября 2003 AlexXF вопрос стар как мир, и ответа на него пока не нашли. Наиболее действенно, это найти списки прокси, есть такие в сети, и внести их в список бана. Но этот список надо постоянно, раз, а то и два, обновлять. Хотя 100% результат не гарантируется. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
AlexXF Опубликовано 4 Сентября 2003 Автор Жалоба Поделиться Опубликовано 4 Сентября 2003 Однако есть идеи по этому поводу: 1. Делать обратный кольцевой запрос при логине пользователя на этот IP адрес с запросом собственного скрипта. Если он срабатывает как прокся, причем отбивающая IP адрес, то пользователя в бан без вопросов. 2. Делать лог по его странам. Если вдруг у пользователя в течении суток-двух страна меняется два-три раза, то автоматом бан. Вот такие мысли... кто предложит чего нового? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
AlexXF Опубликовано 4 Сентября 2003 Автор Жалоба Поделиться Опубликовано 4 Сентября 2003 Итак... вопрос решен, хак написан. Единственный его минус - тормозит секунд 30 при первом вхождении... Куда заливать и что мне за это будет? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Meowth[OGD] Опубликовано 4 Сентября 2003 Жалоба Поделиться Опубликовано 4 Сентября 2003 Я думаю что кроме протирания пирожка с полки ты мало чего получишь Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
AlexXF Опубликовано 5 Сентября 2003 Автор Жалоба Поделиться Опубликовано 5 Сентября 2003 ну чтож... держите! Хак для запрета использования Анонимных Прокси Заливаем на сайт к себе в корень такой файл: /get_ip.php <? global $_SERVER; $ip = $_SERVER["REMOTE_ADDR"]; if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; echo "IP_ADDRESS_CLIENT:" . $ip . ":"; ?> //============================================================================== FILE: /sources/functions.php добавляем в конец файла: //============================================================================== class test_proxy { var $bad_proxy=0; //------------------------------------------- // Check User IP for anonymous proxy //------------------------------------------- function clean_value_back($val) { if ($val == "") { return ""; } $val = str_replace( " ", " ", $val ); $val = str_replace( """ ,"\"" , $val ); $val = str_replace( "<!--" , "<!--" , $val ); $val = str_replace( "-->" ,"-->" , $val ); $val = preg_replace( "/<br>/" , "\n" , $val ); // Convert literal newlines $val = preg_replace( "/$/" , "\\$" , $val ); $val = str_replace( "!" ,"!" , $val ); $val = str_replace( "'" ,"'" , $val ); // IMPORTANT: It helps to increase sql query safety. $val = str_replace( "&" , "&" , $val ); return $val; } function generate_redirect_page() { global $ibforums; $arr=$ibforums->input; $hidden=""; foreach($arr as $key=>$value) { if (strtoupper($key) != 'IP_ADDRESS' && strtoupper($key) != 'REQUEST_METHOD' && strtoupper($key) != 'PRIVACY' && strtoupper($key) != 'LAST_ACTIVITY' && strtoupper($key) != 'LAST_VISIT') { $hidden .= "<INPUT TYPE=hidden name='$key' value='" . $this->clean_value_back($value) ."'>\n"; } } return <<<EOF <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <style type='text/css'> .tablefill { border:1px solid #345487;background-color:#F5F9FD;padding:6px; font-family: Tahoma; font-size: 8pt; color: #000000 } </style> </head> <body bgcolor="#FFFFFF" text="#000000" OnLoad="document.hideform.submit();"> <table width='100%' height='85%' align='center'> <tr> <td valign='middle'> <table align='center' cellpadding="4" class="tablefill"> <tr> <td width="100%" align="center" nowrap> Пожалуйста подождите<br> <br> Данная операция займет не более 30 секунд и Ваши данные не будут утеряны</td> </tr> </table> </td> </tr> </table> <form name="hideform" method="post" action="/index.php"> {$hidden} EOF; } Тут я прервусь на немного... Обратите внимание на то, куда постится форма - Это ВАЖНО!. Если Ваш сервер установлен в какой то поддиректории например - /IPBFORUM/index.php, то естественно надо URL поменять... Можно было сделать красивее - через VARS, но я не стал... function check_ip_by_port($ip, $port) { set_time_limit(0); error_reporting (0); $errno=""; $errstr=""; $fp = fsockopen($ip, $port, $errno, $errstr, 1); if (!$fp) { return 0; } $server = $_SERVER["SERVER_NAME"]; //$server = $_SERVER["SERVER_ADDR"]; $url = "http://" . $server . "/get_ip.php"; // заранее написаный скрипт, который скажет нам IP возврата $in_str=""; fputs($fp, "GET $url HTTP/1.1\r\nHost: $server\r\n\r\n"); while(!feof($fp)){ $line = fgets($fp, 4000); $in_str .= $line; } fclose($fp); if (preg_match("/IP_ADDRESS_CLIENT:(.*):/", $in_str, $regs)) { if ($_SERVER["SERVER_ADDR"] != $regs[1]) { return 1; } } return 0; } function check_anonymous_proxy($show=0) { // Порты для проверки 80,8080,3128 global $_SERVER, $sess; $ip = $_SERVER["REMOTE_ADDR"]; if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; if ($show==1) { echo $this->generate_redirect_page(); flush(); } // test: //$ip = "smtpmail.loginsoft.com"; flush(); $port_array = array ( 0 => 80, 1 => 8080, 2 => 3128, ); $hidden=""; $bad_proxy_detected=0; foreach($port_array as $key=>$value) { if ($bad_proxy_detected==0) { if ($this->check_ip_by_port($ip, $value) == 1) { $hidden= "<INPUT TYPE=hidden name='BAD_PROXY' value='YES'>\n"; $bad_proxy_detected=1; $this->bad_proxy=1; } } } if ($show==1) { if ($bad_proxy_detected==0) { $hidden .= "<INPUT TYPE=hidden name='s' value='" . $sess->session_id . "'>\n"; } echo $hidden . "</form></body></html>"; die(); } return $bad_proxy_detected; } } //================================================================================ в класс session добавляем функцию: //================================================================================ function check_proxy() { global $ibforums; // вот здесь должна быть проверка на анонимность прокси!!! if ($ibforums->input['BAD_PROXY']=='YES') { $this->unload_member(); $this->session_id=0; return 1; }else{ if ($ibforums->input['act'] != 'Login') { global $proxy_check; if ($proxy_check->check_anonymous_proxy(1)==1) { $this->unload_member(); $this->session_id=0; return 1; } } } return 0; ///////////////////////////////////////////////////////// } //================================================================================ Находим в функцию create_member_session() в классе session в самом ее конце вставляетя: // ---------- начало вставки $this->check_proxy(1); // ---------- конец вставки } else { $this->create_guest_session(); } //================================================================================ то же самое и с функцией create_guest_session() В самый конец функции добавляется: // ---------- начало вставки $this->check_proxy(0); // ---------- конец вставки //================================================================================ Функция класса session authorize() Ищем: //------------------------------------------------- // Do we have a valid session ID? //------------------------------------------------- сразу же после этого добавляем: if ($ibforums->input['BAD_PROXY'] == 'YES') { $this->unload_member(); } //================================================================================ //================================================================================ //================================================================================ Файл : /sources/Login.php function do_log_in() { // ----------- изменено global $proxy_check, $DB, $ibforums, $std, $print, $sess, $HTTP_USER_AGENT, $HTTP_POST_VARS; // ----------- изменено $url = ""; // ------------ добавлено if ($proxy_check->check_anonymous_proxy(0)==1) { $DB->query("UPDATE ibf_sessions SET ". "member_name='',". "member_id='0',". "login_type='0' ". "WHERE id='". $sess->session_id ."'"); $sess->session_id=0; $std->my_setcookie( "member_id" , "0" ); $std->my_setcookie( "pass_hash" , "0" ); $std->my_setcookie( "anonlogin" , "-1" ); $sess->unload_member(); $ibforums->input['s']=""; $ibforums->session_id=0; $std->Error( array( 'LEVEL' => 1, 'MSG' => 'poss_hack_attempt') ); } // ------------ добавлено //================================================================================ //================================================================================ //================================================================================ файл : /index.php $std = new FUNC; $print = new display(); $sess = new session(); // ----------- добавлено $proxy_check = new test_proxy; // --------------------- ... ... ... // ----------- добавлено if ($ibforums->input['BAD_PROXY']=='YES' || $proxy_check->bad_proxy==1) { $std->Error( array( 'LEVEL' => 1, 'MSG' => 'poss_hack_attempt') ); } // --------------------- //-------------------------------- if ($ibforums->input['act'] != 'Login' and $ibforums->input['act'] != 'Reg' and $ibforums->input['act'] != 'Attach') { //-------------------------------- // Do we have permission to view // the board? //-------------------------------- //================================================================================ //================================================================================ //================================================================================ Если мы уж хотим полностью закрыть доступ анонимным проксям, то тогда делаем так: Файл: /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( "<!--IBF.LOG_IN_TABLE-->", $skin_universal->error_log_in($QUERY_STRING), $html); } */ //----------------------------------------- // Do we have any post data to keepy? //----------------------------------------- ВСЕ! Кроме сообщения об ошибке, человек пришедший из-за искажающей или анонимной прокси ничего не увидит В принципе на этот код может наворачиваться что угодно, но основное решение такое.Единственным минусом такого кода может быть только то, что если у клиента установлен некий Web сервер на компьютере, то он будет так же опрашиваться... Как ускорить проверку? Если же нас интересуют только АНОНИМНЫЕ прокси, а не ИСКАЖАЮЩИЕ, то надо изменить: FILE: /get_ip.php <? global $_SERVER; $ip = $_SERVER["REMOTE_ADDR"]; // Убираем проверку на HTTP_X_FORWARDEF_FOR // if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; echo "IP_ADDRESS_CLIENT:" . $ip . ":"; ?> //============================================================================== FILE: /sources/functions.php 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, собственно как и поступает анонимный прокси - он выдает себя за клиента идущего на сайт БЕЗ ПРОКСИ СЕРВЕРА. Уфф.... Надеюсь это поможет P.S. Мой пирожок с полки где? Добавлено: Дополнение Для теста можно использовать анонимный прокси: smtpmail.loginsoft.com:80 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Остап Опубликовано 14 Мая 2004 Жалоба Поделиться Опубликовано 14 Мая 2004 Предлагаю не давать сессию прокси ваще ... Экономия времени и места, а так же открытость нарушителей Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Farch Опубликовано 17 Мая 2004 Жалоба Поделиться Опубликовано 17 Мая 2004 юным invisonсам:если вы понимаете сколько процентов аудитории отрубаете вместе с анонимными проксями то хак вам не нужен Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Balancer Опубликовано 17 Мая 2004 Жалоба Поделиться Опубликовано 17 Мая 2004 >если вы понимаете сколько процентов аудитории отрубаете вместе с анонимными проксями то хак вам не нужен Интересно, какая польза может быть с юзеров с публичных прокси? Если же у тебя в нормальной организации или подсетке стоит открытый прокси... Ну, извини. Это твои проблемы. Кстати, открытые прокси даже во многие почтовые блеклисты вносятся. Появится у тебя открытый прокси на машине - и прощай скоро почта на Рамблер, например. Не знаю как сейчас, но в прошлом году Yandex даже заходить к себе с анонимных прокси не позволял. Наверное - всё "юные invisoncы" Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Spectr00m Опубликовано 23 Августа 2004 Жалоба Поделиться Опубликовано 23 Августа 2004 но в прошлом году Yandex даже заходить к себе с анонимных прокси не позволял.И счас тоже запрещает. Да и не только он, а полно админов которые запретили прокси и правильно сделали. А вообще вещь нужная, потомучто я уже не могу выносить как один урод каждый раз меняет прокси, мыло и ник и заходит ко мне на форум, а потом втирается опять в доверие, и когда добивается свуоего подставляет меня. Так что без того чтобы поставить запрет на прокси никак. Это может быть ненужным только тем людям, у которых список забаненых пуст. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Diam Опубликовано 4 Марта 2005 Жалоба Поделиться Опубликовано 4 Марта 2005 Такой вопрос возник по этой модификации: - Как сделать проверку на прокси только при регистрации? (Чтобы каждый раз 30 секунд никто не терял,а только единожды - при попытке зарегистрироваться.) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
skrt Опубликовано 19 Января 2006 Жалоба Поделиться Опубликовано 19 Января 2006 ну чтож... держите!...........а для 2.1 что-нить подобное есть?? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dinka8 Опубликовано 24 Января 2006 Жалоба Поделиться Опубликовано 24 Января 2006 Автор, а о какой версии IPB идет речь)))? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 25 Января 2006 Жалоба Поделиться Опубликовано 25 Января 2006 Автор, а о какой версии IPB идет речь)))?Посмотрел код, по-быстрому. Похоже пойдёт для 1х-2.0.х, возможно что-то чуть придётся подправить. 2Автор мода. Пирожок с полки пока, что на полке. Никто не собирается искать реквизиты -) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
catbegemot.net Опубликовано 15 Февраля 2006 Жалоба Поделиться Опубликовано 15 Февраля 2006 Чего-то я в коде запутался... что где мы проверяем когда? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
asoloviev Опубликовано 20 Февраля 2006 Жалоба Поделиться Опубликовано 20 Февраля 2006 Для 2.1 подойдет? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
nafigator Опубликовано 18 Июля 2006 Жалоба Поделиться Опубликовано 18 Июля 2006 Задача - есть юзер, который выходил с одного IP (сразу видно, выделенка дома). Затем его забанили по IP. Так он теперь ходит через анонимки... Как быть? Предлагать забанить его по е-мейлу - тоже не надо. BTW, есть большущая база бесплатных е-мейлов - можно отсекать халявный е-мейл, не проблема... Но как же быть то с IP ?Кстати, javascript позволяет получить текущий IP (не проксевый)? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Leuzea Опубликовано 18 Июля 2006 Жалоба Поделиться Опубликовано 18 Июля 2006 Предлагаю не давать сессию прокси ваще ... Экономия времени и места, а так же открытость нарушителей А как это сделать? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
vladf Опубликовано 7 Августа 2006 Жалоба Поделиться Опубликовано 7 Августа 2006 Предлагаю не давать сессию прокси ваще ... Экономия времени и места, а так же открытость нарушителей А как это сделать? Если используется прокся, то вход под пользователем невозможен (шлём его куда по дальше) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Denny Опубликовано 7 Августа 2006 Жалоба Поделиться Опубликовано 7 Августа 2006 Грамотно настроенный проксик (анонимный) такой мод не возьмёт, я больше склоняюсь к использованию проверке по отпечатку системы пользователя. Проверку можно сделать очень гибкую и намного лучше защитит, чем проверку на прокси, что сделать практически нереально. Вот только такая система денег стоит и немаленьких Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
DestroyNet Опубликовано 7 Августа 2006 Жалоба Поделиться Опубликовано 7 Августа 2006 я больше склоняюсь к использованию проверке по отпечатку системы пользователя.А если пользователь захочет зайти на форум с работы, из клуба и тд.??? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Denny Опубликовано 8 Августа 2006 Жалоба Поделиться Опубликовано 8 Августа 2006 Процитировал бы всё, нашёл бы и ответ Проверку можно сделать очень гибкую.Никто не запрещает добавить несколько отпечатков на аккаунт, с клубами всё сложнее, как вариант, можно сделать спец флэшку с ключём и по ней проверку делать. Это реально, но я таким не занимался, т.к. все посетители моего форума клубам не доверяют, как и я ЗЫ: вот подумал, может попрактиковать с флешкой малёк, мб что-то интересное получится Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
RuKeeper Опубликовано 19 Июня 2007 Жалоба Поделиться Опубликовано 19 Июня 2007 люди для 2.1.7 как быть??? очень надо Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
atlant1s Опубликовано 19 Июня 2007 Жалоба Поделиться Опубликовано 19 Июня 2007 AlexXF, ты бы лучше в Архиве выложил.Многие проходят форумы и темы стороной. И видят только то, что есть в архиве. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
RuKeeper Опубликовано 19 Июня 2007 Жалоба Поделиться Опубликовано 19 Июня 2007 но ведь какой то решение должно быть? кто знает? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.