Защита продажных ссылок

Озаботился не так давно защитой своих сайтов от детекторов продажных ссылок, типа http://www.venality.ru. Если вы не защищаете продажные ссылки, попробуйте ввести туда адрес страницы, на которой у вас проданы ссылки, он скорее всего определит их. Работает он просто: к адресу страницы добавляются динамические параметры, вроде ?sape=1, в результате чего страница для скрипта биржи ссылок становится уже другой, и ссылки с нее пропадают. Хотя, ппо факту, ничего другого на странице не меняется.

Конечно, сомнительно, что поисковики будут так фильтровать продажные ссылки, но лучше перестраховаться =)

В сети полно скриптов на эту тему, некоторые занимают по 100 и больше строк! Я обошелся всего двумя =) Но скажу сразу, у меня почти все сайты на WordPress, и скрипт писался именно под вордпресс с включенным ЧПУ. Вот эти строки нужно добавить в шаблон header.php, они должны быть самыми первыми, до тега HTML и DOCUTYPE:

< ?
$url = explode('?', $_SERVER['REQUEST_URI']);
if ($url[1] AND (!$_GET['s'])) header('Location: http://'.$_SERVER['HTTP_HOST'].$url[0]);
?>

В первой строке мы делим URL-адрес на две части: в одной адрес самой страницы, типа index.html, а в другой – все дополнительные параметры, все, что после знака вопроса.

Во второй строке мы проверяем, есть ли что-то во второй части адреса, и не производился ли поиск ($_GET[‘s’] проверяет, не установлена ли переменная s, в кооторой задается строка поиска в вордпрессе)

Если есть какие-то дополнительные параметры в строке, и если это не строка поиска, то идет перенаправление на страницу без параметров. Элементарно =)

На самом деле, мне кажется тут нужно быть немного строже, делать не перенаправление, а отдавать ошибку 404, типа “страница не найдена”, ибо это логично – нет такой страницы, с такими параметрами. Посмотрите, например, как сделано в Гугле, если подставить левый параметр, то выдается ошибка 404.

Если кто хочет отдавать ошибку, то замените вторую строку скрипта на:

if ($url[1] AND (!$_GET['s'])) header('HTTP/1.0 404 Not Found');

Я пока поставил оба варианта, на разных сайтах. Ни один детектор продажных ссылок не определяет факт продажности =) Пользуйтесь, на здоровье!

Кстати, спустя какое-то время доработал скрипт, теперь уже в две строки не уложился, зато предусмотрен список разрешенных параметров, которые не выбрасываются, зато все остальные вырезаются. Вот он:

< ?php
$url = explode('?', $_SERVER['REQUEST_URI']);
$allows = array('s', 'cid', 'replytocom', 'action', 'ads_basecat', 'page_id', 'ADS_EDIT_POST');
parse_str($url[1], $qv);
foreach ($qv as $key => $val) {
	if (in_array($key, $allows)) $q[] = $key.'='.$val;
	else $dis = 1;
}
if ($dis == 1) {
	if (sizeof($q) != 0) header('Location: http://'.$_SERVER['HTTP_HOST'].$url[0].'?'.implode('&', $q));
	if (sizeof($q) == 0) header('Location: http://'.$_SERVER['HTTP_HOST'].$url[0]);
}
?>

В переменную $allows вписываем все параметры, которые нам не надо вырезать (через запятую, и в апострофах). В данном скрипте у меня записаны некоторые переменные вордпресса и плагинов, которыми я пользуюсь.