При чтении статьи Удаление левых ссылок с сайта - часть 1 вы могли заметить, что поиск постороннего контента сводиться, в сущности, к поиску текстовой части этого самого контента в коде сайта. Естественно, что "внедрители" левых ссылок это тоже знают и всеми силами стараются скрыть свои включения, кодируя и маскируя самым разнообразным образом. Первый способ такой "маскировки" мы уже рассмотрели в 1-ой части статьи - текстовое содержимое контента "разрезается" на несколько разных частей по 1-3 символа, а затем собирается из них программным способом (был приведён пример с JavaScript).

Точно такой же метод можно организовать и с помощью PHP (да и в принципе любого другого скриптового языка, который будет поддерживать сервер). Однако, "разрезание" контента на части не единственный метод маскировки. Существует и довольно широко используется для этих целей кодирование (шифрование) данных. Зашифрованный контент вставляется в код сайта и при отображении в браузере расшифровывается и выводиться в тело страницы. Естественно, что в таком случае собственно оригинальный код "левой" ссылки искать бесполезно. Но исходный код (код, который её формирует) искать вовсе не бесполезно и даже нужно.

Поиск и удаление его рассмотрим на примере. Мы будем искать в коде страницы зашифрованный контент из примера в первой части. Чтобы зашифровать контент воспользуемся функцией PHP - base64_encode. Создадим простой PHP-скрипт:

<?php
echo base64_encode ( '<div style="margin-left:-10000px">
<a href="http://kupi-slona.ru" title="продажа редких слонов
 серых полосатых">kupi-slona.ru</a></div>' );
?>

при запуске этот скрипт выведет вам на экран строчку такого содержания

PGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6LTEwMDAwcHgiPlwKPGEgaHJlZj0i 
aHR0cDovL2t1cGktc2xvbmEucnUiIHRpdGxlPSLQ0s/EwdbBINLFxMvJyCDT 
zM/Oz9dcCiDTxdLZyCDQz8zP08HU2cgiPmt1cGktc2xvbmEucnU8L2E+PC9k 
aXY+ 

Это и есть кодированный (а именно base64-кодированный) контент нашей "левой" ссылки.

Теперь, чтобы ссылка вывелась в браузере в своем "нормальном" виде разработчик-внедритель использует в коде сайта конструкцию примерно такого типа

echo base64_decode ( 'PGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6LTEwMD 
AwcHgiPlwKPGEgaHJlZj0iaHR0cDovL2t1cGktc2xvbmEucnUiIHRpdGxlPS 
LQ0s/EwdbBINLFxMvJyCDTzM/Oz9dcCiDTxdLZyCDQz8zP08HU2cgiPmt1cG 
ktc2xvbmEucnU8L2E+PC9kaXY+' ); 

или

$text_link = base64_decode ( 'PGRpdiBzdHlsZT0ibWFyZ2luLWxlZn 
Q6LTEwMDAwcHgiPlwKPGEgaHJlZj0iaHR0cDovL2t1cGktc2xvbmEucnUiIH 
RpdGxlPSLQ0s/EwdbBINLFxMvJyCDTzM/Oz9dcCiDTxdLZyCDQz8zP08HU2c 
giPmt1cGktc2xvbmEucnU8L2E+PC9kaXY+' );

В первом случае в тело страницы сразу же выводиться результат декодирования строки - контент "левой" ссылки, во втором случае расшифрованный контент помещается в переменную, которая потом где-либо далее по коду выводиться при помощи команды echo.

При таком способе генерации постороннего контента вам придется просмотреть (при помощи тех же инструментов текстового поиска) все файлы сайта на наличие конструкций наподобие base64_decode. Можете при этом попробовать расшифровать вышеописанным способом закодированные строки. Если результат расшифровки будет очень похож на содержимое "левой" ссылки, то можете радоваться - вы нашли искомое. Тут уже удаление не составит труда.

Данный способ может быть ещё более усложнён тем, что выводимый посторонний контент также будет "порезан" на более мелкие кусочки, которые будут зашифрованы отдельно, а потом в процессе выполнения скрипта страницы расшифрованы, собраны и отображены в браузере.

Кстати, примите во внимание, что алгоритм реализации шифрования/дешифрования BASE64 можно реализовать не только на PHP, в частности есть готовые решения этой реализации на JavaScript.

Четвертый способ, при помощи которого можно "спрятать" посторонний контент ещё более извращён. Он основан на применении функции PHP eval(). Эта функция выполняет данную ей в качестве аргумента строку в качестве команды PHP, т.е. если мы включим в PHP-скрипт конструкцию

eval ( 'echo "123"' );

то в результате получим тоже самое, что при выполнении простой команды echo "123". А если вместо echo "123" мы поставим echo base64_decode ('....') ? Понимаете о чем я? К тому же строку, подаваемую в качестве аргумента функции eval() также можно зашифровать и расшифровывать непосредственно в самой фукнции (ну рассмотрение этого вопроса несколько перекрывается в вышеописанным способом, поэтому не будем останавливаться на нём подробно.

В итоге, вы должны, кроме всего прочего, внимательно следить за использованием функции eval  в коде вашего сайта. Попробуйте закомментировать её, если код пропал - значит вы опять нашли "источник зла".

Продолжение в следующей статье Удаление левых ссылок с сайта. Часть 3