1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Защита вашего сайта

Тема в разделе 'PHP', создана пользователем Botchal, 20 июн 2010.

  1. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    Данный скрипт отсечёт мне кажется всех ботов

    Код:
    function cheked_proxy(){
    if($_SERVER['HTTP_X_FORWARDED_FOR']!=""){die("<div class='warning'>Вы используете proxy server, это недопустимо, сожалеем но это наше требование</div>");}
    if($_SERVER['HTTP_CLIENT_IP']!="" and $_SERVER['REMOTE_ADDR']!=$_SERVER['HTTP_CLIENT_IP']){die("<div class='warning'>Вы используете proxy server, это недопустимо, сожалеем но это наше требование</div>");}
    }
    //ЧЕК БОТ КРЭЗИ РЕЖИМ//
    function checked_bot_crazy(){
    if($_SERVER['HTTP_USER_AGENT']==""){die("<div class='warning'>Ваш броузер не определён, сожалеем но это наше требование</div>");}
    $coockiename1=md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT'].$_SERVER['HTTP_USER_AGENT']."78eryher78h768erher87h77er8herh7her7h");
    $coockiename2=md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['HTTP_ACCEPT'].$_SERVER['REMOTE_ADDR']."re8h7er89h67erh6er8her8h6erhye9gyreyg");
    
    
    
    
    if (strpos(file_get_contents("logs/site_users/hashcoockie"), $coockiename1)) {}else{
    if (strpos(file_get_contents("logs/site_users/hashcoockie"), $coockiename2)) {}else{
    $hashcoockie = @fopen("logs/site_users/hashcoockie","a+");
    $D = "$coockiename1 | $coockiename2\r\n";
    fwrite($hashcoockie,$D);
    fclose($hashcoockie);
    }}
    echo
    "
    <!-- проверка есть ли у цели разрешение экрана -->
    <script type='text/javascript'>
    function setCooc (){document.cookie = '".$coockiename1."=' + screen.availWidth;
    document.cookie = '".$coockiename2."=' + screen.availHeight; 
    }var Scrnonload = window.onload;
    window.onload = function () { if(Scrnonload) Scrnonload(); setCooc();
    }</script>
    <!-- проверка есть ли у цели разрешение экрана -->
    ";
    
    $width = $_COOKIE[$coockiename1];$height = $_COOKIE[$coockiename2];
    if($width=="" or $height==""){
    if($_SERVER['HTTP_REFERRER']=="/" or $_SERVER['HTTP_REFERRER']=="index.php"){
    die("<div class='warning'>Ваш броузер не поддерживает JavaScript либо выключены Coockie, сожалеем но это наше требование1</div>");}else{die("<meta http-equiv='Refresh' content='0;URL=index.php'>");}
    }
    $coockiename1=md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT'].$_SERVER['HTTP_USER_AGENT']."78eryher78h768erher87h77er8herh7her7h");
    $coockiename2=md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['HTTP_ACCEPT'].$_SERVER['REMOTE_ADDR']."re8h7er89h67erh6er8her8h6erhye9gyreyg");
    if (strpos(file_get_contents("logs/site_users/hashcoockie"), $coockiename1)) {}else{die("<div class='warning'>Ваш броузер не поддерживает JavaScript либо выключены Coockie, сожалеем но это наше требование</div>2");}
    if (strpos(file_get_contents("logs/site_users/hashcoockie"), $coockiename2)) {}else{die("<div class='warning'>Ваш броузер не поддерживает JavaScript либо выключены Coockie, сожалеем но это наше требование</div>3");}
    
    }
    //ЧЕК БОТ НОРМАЛ РЕЖИМ//
    function cheked_bot_normal(){
    if($_SERVER['HTTP_USER_AGENT']==""){die("<div class='warning'>Ваш броузер не определён, сожалеем но это наше требование</div>");}
    $ip = $_SERVER['HTTP_CLIENT_IP'];if($ip==""){$ip=$_SERVER['REMOTE_ADDR'];}
    $counter = $ip;
    setcookie("botchaltestbot",$counter);
    if($_COOKIE['botchaltestbot']!=$ip){
    if($_SERVER['HTTP_REFERRER']=="/" or $_SERVER['HTTP_REFERRER']=="index.php"){
    die("<div class='warning'>Ваш броузер не определён либо у вас отключены Coockie, сожалеем но это наше требование</div>");}else{die("<meta http-equiv='Refresh' content='0;URL=index.php'>");}
    }}
    //ЧЕК РАЗМЕР ЗАГОЛОВКОВ//
    function checked_size_http_header(){
    $maxheadersize="300";
    if(strlen($_SERVER['HTTP_USER_AGENT']) > $maxheadersize or strlen($_SERVER['HTTP_REFERRER']) > $maxheadersize or strlen($_SERVER['HTTP_ACCEPT'])  > $maxheadersize
    or strlen($_SERVER['CONTENT_LENGTH']) > $maxheadersize or strlen($_SERVER['HTTP_COOKIE']) > $maxheadersize){die("<div class='warning'>Ответы вашего броузера серверу слишком длинные, сожалеем но это наше требование</div>");}
    }
    //РАЗМЕР ПОСТ И ГЕТ//
    function cheked_size_post_and_get(){
    $maxPOSTsize="200";
    $maxGETsize="100";
    foreach($_POST as $val)if(strlen($val)>$maxPOSTsize){die("<div class='warning'>Ответы вашего броузера серверу слишком длинные, сожалеем но это наше требование</div>");};
    foreach($_GET as $val)if(strlen($val)>$maxGETsize){die("<div class='warning'>Ответы вашего броузера серверу слишком длинные, сожалеем но это наше требование</div>");};
    }
    



    Писал всё руками, если что-то не робит, отписывайтесь!!!

    Начнём по порядку:

    1 функция function cheked_proxy() делает простую проверку на использование прокси

    2 функция function checked_bot_crazy() - на мой взгляд самая крутая!

    что она делает:

    1) Генерирует названия куки основываясь на HTTP заголовках клиента и отправляет их ему, название кукисов сгенерированно а их содержание это разрешение экрана которое берётся из яваскрипта(у ботов ведь нету разрешения, а написать бот который понимает js это целове дело) потом записывает имена куки в файл в дериктории logs/site_users/hashcoockie (hashcoockie это сам файл) далее если куки на клиенте найдены то снова генерирует название основываясь на хеадерах и сравнивает с тем что есть в базе, если всё впорядке то пропускает юзера дальше, если нет то умирает. Этим мы отсеиваем как я и сказал ботов. Даже если хакер подсунет из броузера куки то они не совпадут с генерируемым названием куки, так как у бота и броузера заголовки разные, как вы уже заметили в скрипте берутся такие вещи как $_SERVER['REMOTE_ADDR'] $_SERVER['HTTP_USER_AGENT'] и самое главное что никто никогда в ботах не высталяет это $_SERVER['HTTP_ACCEPT'] (какие файлы броузер понимает)

    Единственный возможный обход это полностью эдентичные заголовки в боте и броузере, но до этого злоумышленнику надо ещё догадаться!) И ещё 1 минус... про яндекс на сайте можно забыть(он же тоже бот...)

    Так следующая функция простой чек бота - cheked_bot_normal()

    посылает куки, редиректит и принимает куки, если всё ок то пропускает дальше

    Следующая довольно важная функция это checked_size_http_header() чекает заголовки на их размер, если размер превышает $maxheadersize то умирает

    cheked_size_post_and_get() тоже самое, проверяет велечину всех гет и пост запросов

    [war2]На страницу сайта вставляем так:

    include "файл с этими функциями";

    И если надо активировать какую либо функцию то пишите в вашем файле index.php

    Код:
    cheked_size_post_and_get();
    название функции(это для тех кто синтаксис не знает  :lol: )

    [/war2]

    P.S. Мне тоже иногда плюсики нужны  :D

    P.P.S. Это кстати маленький отрывок PMW 1.5 думаю представляете будущий авторитет этого проекта


    скачать http://depositfiles....files/cp0tk3wtb
    10 пользователям это нравится.
  2. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    только прокси ?или VPN тоже?

    PS Имхо бота даже для такой реги написать можно =)

    А таг плюсег!1

    PSS Ставте ReCapcha,её фиг обойдёшь =Р
  3. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    ну вобще это не рега, это просто проверочка перед загрузкой страниц сайта
  4. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Ну всё равно)защита ведь...и даже такая проверка не спасёт

    PS Всё что создал человек можно взломать =)
  5. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    спасёт, предложи вариант работы бота
  6. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Смотря как писать...можно простым вариантом через вебброузер.Если рега проверяет и на VPN то придёцо потрудицо если нет то юзаем vpn.Куки будут юзацо как и в обычном браузе (при надобности удаляюцо) ну остальное код код и есчо раз код
  7. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    ну тогда вот тебе

    Код:
    function time_pages_load($deletetime,$maxpages,$pertime,$page_for_ban){
    $time=time(U);
    $time_detected=$time-$pertime;
    $ip = $_SERVER['HTTP_CLIENT_IP'];if($ip==""){$ip=$_SERVER['REMOTE_ADDR'];}
    $query = "select time_load from page_load_detected where ip='$ip' and time_load>'$time_detected'";
    $result=mysql_query($query);$result=mysql_num_rows($result);
    if($result >= $page_for_ban){
    $htaccess = @fopen(".htaccess","a+");
    $deny = "deny from ".$ip." \r\n";
    fwrite($htaccess,$deny);
    fclose($htaccess);
    die("<div class='warning'>Вы слишком часто листаете страницы, этим вы нагружаете сервер,
    
    просматривате страницы не больше чем ".$maxpages." страниц в ".$pertime." секунд(ы)
    
    <font color='red'>На данный момет вы заблокированы по IP адресу</font>
    
    для разблокировки свяжитесь с администратором</div>");}
    if($result >= $maxpages){die("<div class='warning'>Вы слишком часто листаете страницы, этим вы нагружаете сервер,
    
    просматривате страницы не больше чем ".$maxpages." страниц в ".$pertime." секунд(ы)
    
    <a href='index.php'>Хорошо, я постараюсь</a></div>");}
    
    $time_deleted=$time-$deletetime;
    $result=mysql_query("delete from page_load_detected where time_load < '$time_deleted'");
    
    $query = "insert into page_load_detected (ip,time_load) values('$ip','$time')";
    $result=mysql_query($query);
    }
    
    создайте таблицу page_load_detected

    Код:
    CREATE TABLE `page_load_detected` (
    `id` int(20) NOT NULL AUTO_INCREMENT,
    `ip` varchar(50) NOT NULL DEFAULT '',
    `time_load` int(40) NOT NULL ,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251;
    
    и файл .htaccess в корне

    в index.php добавте

    Код:
    time_pages_load("600","3","1","10");
    1 число, фактически врямя ранения логов

    2 число страниц

    3 временной промежуток в секундах в котором можно просматривать (предыдущее число) страниц

    4 если за (третье число) просмотрено N страниц то бан по .htaccess по ip

    в нашем варианте можно просматривать 3 страницы в 1 секунду, если просмотрено 10 страниц за 1 секунду то бан по IP, время хваранения 10 минут(600 секунд)
  8. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    с этим боты становятся просто не актуальны ибо юзать им можно как и простым юзерам
  9. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    TheMazzahaka а ты потести VPN)))
  10. mr.Slink Пользователи

    Сообщения:
    261
    Лайки:
    92
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    odoRemasrered
    Страна:
    Russian Federation Russian Federation
    А какже гугль янексъ, у них нет разрешения и куки они не берут :D
  11. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    А вот если вдруг окажется N просмотров за N времени то автоматом вкл защита от ботов)))) Дело техники! Всё автоматом
  12. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Ну дак всеравно ведь можно написать бота =\ не такого скоростного но всёже :D

    PS Самая тру защита это рекапча.Она вставляецо в processor.php и хер ломанёшь ботами теперь...и эту же защиту по глупости (или нупству оО)могут вставить в index.php и йа упаду пат стол хДД
  13. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    куда чего непонял?
  14. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Если эту защиту вставять в index.php то я упаду в подвал :D
  15. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    так падай ибо в pmw15 такая проверка будет перед загрузкой каждой страницы
  16. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    ботчал..для каждой защиты есть своя атака :D и защитицо от всех видов анриал 
  17. StAlKeR7779 Модератор Команда форума Модератор Программист Пользователи

    Сообщения:
    31
    Лайки:
    3
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    angelemu
    угу =)
    даже если сделать защиту(тоесть отсеивание ботов) то значит кто то всё равно будет не отсеиваться и боту будет достаточно замаскироваться под него(в данном случае под браузер)
  18. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    так и что надо будет этому боту, если у него ограничение по времени на просмотры страниц стоит, тут не брутфорс не ддос...
Черновик сохранён Черновик удалён

Поделиться этой страницей