Столкнулся на своём сайте со следующей проблемой.
Сайт сделан на Joomla 3.0.0. Сейчас некие хакеры постоянно заходят на него со слегка исковерканных адресов. Выбирают самые посещаемые статьи сайта – и слегка видоизменяют их адрес, обычно «модифицируя» в нём всего лишь одну букву.
Если при этом в адресе сохраняется правильный номер id, Joomla после такого изменения, как ни в чём не бывало, выдаёт нужную страницу. Поисковики заглатывают видоизменённый адрес: в результате Google может выдавать на эту страницу одну ссылку, Яндекс – другую, Mail – третью и т. д. Возможно, что даже в одном и том же поисковике по одному запросу на страницу может выдаваться ссылка с одним адресом, а по другому запросу – с другим, исковерканным хакером.
В итоге рейтинг лучших статей резко снижается, так как число посетителей начинает дробиться между якобы существующими несколькими материалами. Материал по этой причине перестаёт быть топовым, идёт в рейтингах вниз.
Дёшево и сердито: даже и без взлома сайта удаётся нанести ему весьма серьёзный ущерб.
Мой сайт в последнее время просто бомбардируют такими атаками. Каждый день вижу в Яндекс Метрике по одному-два «левых» адреса – и именно на самые посещаемые страницы. А Joomla по этим левым адресам прекрасно открывает искомые материалы, не выдавая ошибки 404! Её разработчики, видимо, хотели таким образом вложить в систему крупное преимущество, а получился сильнейший недостаток!
Служба поддержки Яндекса посоветовала мне решить вопрос правильным указанием на страницах атрибута canonical.
В Joomla 3, как известно, с этим атрибутом серьёзные проблемы. Но я произвёл правку кода системы по способу, указанному в статье
http://www.webengineer.pro/refinement-of-joomla-and-her-extensions/12-ispravlenie-oshibki-kanonicheskikh-ssylok-v-joomla-3x.
После этого canonical стал указываться правильно, но только в случаях правильного указания адреса статьи. Однако для тех адресов, которые исковерканы хакерами, он пишется неверно.
Хакерское коверканье имеет две разновидности. В первом случае меняется ИМЯ МАТЕРИАЛА, т. е. последняя часть адреса (после номера id). В этом случае для адреса, к примеру:
имя-сайта/index.php/имя-категории/18-abcdв атрибуте canonical получим
имя-сайта/index.php/имя-категории?catid=18&id=18:abcdЭто сравнительно небольшое изменение. Здесь из canonical надо удалить лишь ненужный дополнительный фрагмент. Данную проблему мне сравнительно легко удалось решить лёгкой дополнительной правкой кода.
Но дело становится хуже, когда хакеры коверкают ИМЯ КАТЕГОРИИ материала, т. е., к примеру, вместо
имя-сайта/index.php/имя-категории/18-abcdпишут
имя-сайта/index.php/имя-кат/18-abcdв этом случае в canonical получаем
имя-сайта?catid=0&id=18Здесь из canonical пропадает имя категории. И чтобы исправить это выражение, нужно определить это имя по id материала.
Как это сделать?
Возможность, безусловно, есть, ибо Joomla, если ввести в неё, скажем, адрес "имя сайта/index.php/18", выдаст не ошибку 404, а страницу материала с id=18 – то есть определит категорию правильно.
Не подскажет ли кто из продвинутых знатоков, как в Joomla программно найти по id полный адрес материала, с именем категории? Если он будет установлен, выделить имя категории и сформировать в canonical нужный результат даже при моём среднем знании PHP будет совсем нетрудно.
очень прошу тех, кто хорошо знаком с Joomla-программированием как-нибудь помочь в этой беде, которая в последнее время просто достала! ! Новые «левые» адреса вижу Яндекс Метрике ежедневно! Боролся с ними через robots.txt, но там число записей теперь уже увеличилось как в хорошем телефонном справочнике.
Ещё раз хочу обратить внимание всех: проблема эта очень важна. Речь идёт о виде хакерства, который приобретает сейчас широчайший размах.
