Был у меня случай, когда один фейковый сайт полностью копировал сайт заказчика с подменой данных на свои. При этом в поисковых системах по нужным ПС запросам этот сайт находился намного выше, чем оригинальный сайт. Честно говоря, довольно токи интересный подход у конкурента был)) Но мы сейчас поговорим не об этом, а о примере того, как можно защитить сайт от копирования ботами/парсерами.
Первая мысль у меня была в том, что на сайте оригинале была заложена закладка. Однако, детально проанализировав сайт на наличие сторонней гадости, ничего не нашлось. После анализа файла access_log четко стало понятно, что скрипт работает со стороннего сервера, фейка, и парсит контент с подменной данных.
Просто забанить IP смысла нет, так как не составит большого труда парсить контент через прокси, т.е IP будет постоянно меняться. Тут возникла глупая идея – вставить в контент скрипт, который будет проверять HOST и, в случае не соответствия, редиректить на оригинал сайта.
Пример скрипта:
1 2 3 4 |
<script> if(window.location.hostname!=='portfob.ru') {window.location.hostname='portfob.ru';} </script> |
Какое то время, это работало. На фейке автоматом появился этот скрипт, и посетители с него начали попадать на оригинальный сайт, в том числе и с поисковых систем.
Знал я конечно, что счастье не вечно!
Через некоторое время бот начал реплейсить название домена. Мы вернулись к началу проблемы.
В этот момент возникла еще одна идея – поставить “Google Captcha” по вверх индексного файла (в моем случае). То есть логика такова: кто бы не зашел на сайт, ему сначала показывается капча, только потом!!! – весь оригинальный контент. На сегодняшний день мне пока не известны системы ее обхода. Следовательно, когда бот-парсер попадает на сайт, он подвисает на капче и идет лесом.
Защита сайта от копирования ботами – Google reCaptcha
Перед тем, как использовать reCaptcha, нам нужно зарегистрироваться и получить siteKey и secretKey на сайте https://www.google.com/recaptcha/intro/index.html
Заполняем все формы и регистрируемся, в замен он нам дает нужные ключи:
После этого переходим к подготовке формы, которая будет выводиться к первичному обращению на сайт. Я вам покажу на примере своего блога:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
<?php function gCaptcha($msg){ echo ' <html> <head> <script src="https://www.google.com/recaptcha/api.js"></script> </head> <style> .parent { width: 100%; height: 100%; position: absolute; top: 0; left: 0; overflow: auto; } .block { width: 350px; height: 250px; position: absolute; top: 50%; left: 50%; margin: -255px 0 0 -255px; background-color: #ffffff; border: 2px solid #D4D4D4; border-radius: 10px; box-shadow: 0 0 15px #A9A9A9; } .button4 { font-family: Verdana, Geneva, sans-serif; font-size: 24px; color: #FFF; padding: 5px 50px 5px 50px; border: 1px solid #999; text-shadow: 0px 1px 1px #666; text-decoration: none; -moz-box-shadow: 0 1px 3px #111; -webkit-box-shadow: 0 1px 3px #111; box-shadow: 0 1px 3px #111; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; background: #64a724; background: -moz-linear-gradient(top, #64a724 0%, #579727 50%, #58982a 51%, #498c25 100%); background: -webkit-gradient(linear, left top, left bottom, from(#64a724), to(#498c25), color-stop(0.4, #579727), color-stop(0.5, #58982a), color-stop(.9, #498c25), color-stop(0.9, #498c25)); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'#64a724\', endColorstr=\'#498c25\', GradientType=0 ); cursor: pointer; } .button4:hover { border: 1px solid #FFF; } </style> <body> <div class="parent"> <div class="block"> <center> <form action="" method="post"><br> <font color="blue"><h1>Анти бот</h1></font> <span class=\'msg\'></span> <div class="g-recaptcha" data-sitekey="ТУТ МОЙ СЕКРЕТНЫЙ КЛЮЧ"></div> <br> <input type="submit" class="button4" value="Подтвердить!" /> </form> </center> </div> </div> </body> </html>'; } function gCurlCaptcha($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16"); $curlData = curl_exec($curl); curl_close($curl); return $curlData; } $msg=''; if(isset($_SERVER["REQUEST_METHOD"])) { if(isset($_POST['g-recaptcha-response'])){ $recaptcha=$_POST['g-recaptcha-response']; if(!empty($recaptcha)) { include("getCurlData.php"); $google_url="https://www.google.com/recaptcha/api/siteverify"; $secret='ТУТ СЕКРЕТНЫЙ КЛЮЧ ДЛЯ ГУГЛА'; //Секретный ключ $ip=$_SERVER['REMOTE_ADDR']; $url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip; $res=gCurlCaptcha($url); $res= json_decode($res, true); //reCaptcha введена if($res['success']) { // Продолжаем проверку данных формы define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' ); } else { $msg="Please re-enter your reCAPTCHA."; gCaptcha($msg); } }} else { $msg="Please re-enter your reCAPTCHA."; gCaptcha($msg); } } ?> |
Таким образом мы прячем сайт от ботов, которые могут дублировать, парсить наш контент. Конечно, есть разносторонние хитрости, и опытный человек сможет их найти. Чем полезен еще такой подход, так это тем, что он помогает нам защититься от ботов, которые массово бегают по спискам конкретных сайтов и пытаются в автоматическом режиме реализовать ту или иную уязвимость. Но тут оптимальное решение для подобного момента – подключать капчу через функцию auto_prepend_file.
auto_prepend_file – определяет имя файла, который будет автоматически обрабатываться перед основным файлом. Файл вызывается так, будто он был подключен при помощи функции require
Чтоб вы не пугались, как отреагирует, к примеру, поисковая система yandex или какие либо социальные сети, скажу, что тут все нормально просматривается и индексируется.
Скриншот с вебмастера в яндексе после установления капчи на данный сайт:
Единственное, что тут может испугать, так это пользователя по неопытности, по незнанию, который может не захотеть вводить капчу и уйти. Ну раз так, значит это не наш клиент)))