Как то раз у одного из моих клиентов, пользующегося бесплатным хостингом, неожиданно стала всплывать недоброкачественная реклама на сайте. Расследование указало на то, что хостинг просто заразили вирусом. Переезжать на новый хостинг по некоторым причинам было неприемлемо. Файлы самого сайта были вирусом не тронуты. В итоге пришлось искать альтернативные методы вырезания рекламы. Сначала был испробован…
Метод перехвата вывода с чисткой кода после закрывающего тега body
Именно в этом месте в моем случае и оказался вредоносный код. Перед началом вывода был добавлен код:
<?php
function antibug($buffer)
{
// убрать мусор
$garbageCode = substr(strstr($buffer, "</body>"), 7);
$buffer = str_replace($garbageCode, "", $buffer)."</html>";
return $buffer;
}
ob_start("antibug");
?>
А в конце:
<?php
ob_end_flush();
?>
Для большинства страничек на сайте это сработало. Но в некоторых местах реклама полезла опять. Тогда был применен 2-ой способ.
Поднятие слоя с сайтом выше всплывающей рекламы
Способ, строго говоря, не очень хороший, так как вредоносный код он не убирает. Из-за этого если хостинг, к примеру, не вылечится от вируса долгое время, кто знает, могут быть санкции поисковой системы — что мол сайт угрожает безопасности и так далее. Но на первое время пойдет, чтобы реклама не надоедала. В моем случае именно это и нужно было. А делается это просто — элементу содержащему весь сайт (в примере, div с идентификатором class=’site’) назначается следующий код CSS:
.site {position:relative; z-index:999999;}
И всё! Реклама на сайте присутствует, но её просто не видно.
Кстати у клиента хостинг все таки вылечился, а указанные меры остались в качестве предосторожности на будущее. Конечно, не панацея, но все же.