Редирект с помощью плагина (J)ExR и спамеры
Довольно приличное время пользуюсь плагином (J)ExR, с помощью которого легко заменить внешние ссылки на внутренние в нужных частях сайта, будь то текст поста, текст коммента, ссылка на имени комментатора. Плагин нравится, но, к сожалению, давно не обновляется.
Хорошо, что у меня потихоньку появляются навыки работы с PHP, благодаря чему могу вносить некоторые нужные мне изменения в плагин.
Вчера у алтайского блоггера прочитал о том, что недобросовестный пользователь Интернета воспользовался багом данного плагина и сгенерировал редирект через его сайт на свой порно-ресурс.
Чтобы избежать подобной хрени, нужно в плагине добавить проверку реферера, т.е. определить, где кликается ссылка. Если в редиректной ссылке содержится адрес сайта, с которого кликается эта ссылка, то редирект сработает, в обратном же случае на сайте откроется 404-я страница.
В файле jexr.php в самом-самом конце находим строку:
1 | add_action('template_redirect', 'j_global_redirect'); |
И заменяем ее следующим кодом:
1 2 3 | if (strstr($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) != FALSE) { add_action('template_redirect', 'j_global_redirect'); } |
Проверил - вроде бы работает, как надо.
1. А если браузер не шлёт/файрвол рубит реферера?
2. Если версия PHP позволяет, вместо strstr() лучше использовать stristr(). Либо делать strtolower() для обоих параметров.
Спасибо за хак к плагину. ))
А мне больше нравится wp-noexternallinks - то что ссылки не кодируются а остаются в виде - http://YourBlog.com/goto/http://gmail.com
Получается, что это проблема юзера. Можешь предложить более рациональное решение?
Спасибо, надо будет попробовать.
Попробуй, это более этичный вариант для блога, вроде и ссылки внешние скрываешь и даешь посетителю шанс увидеть источник или ссылку куда он переходит… (J)ExR больше подходит когда приглашаешь рефералов, ведь находятся деб..лы которые не хотят стать чьим нибудь рефералом (на душе у них будет не спокойно) и стирают твой инвайт код.
Посмотрю на плагин — скажу, пока не знаю.
Самое простое, что приходит на ум, не видя код — проверять, не пустой ли реферер. Если пустой, то устанавливать обработчик; если не пустой — идем по твоему варианту.
Ясно. Я, в принципе, и сам это могу сделать.
По поводу видимости ссылок согласен, именно поэтому я у себя отключил jExR.
PS. Я, кстати, один из таких деб..лов :)
Спасибо очень нужная вещь на выходных устанавлю себе!
Похакал у себя плагин. Пасиба ;)
Хех, зашел к тебе в блог, чтобы поинтересоваться насчет подобного плагина и нашел ответ в комментах =) WP-NoExternalLinks - практически то, что нужно. Жаль, там нет возможности автоматически отключать маскировку адреса для тех, кто оставил больше определенного количества комментов. “Белый список” нужно составлять ручками…
ЗЫ: есть еще Comment Link Manager, который как раз-таки выводит ссылки только для тех, кто написал больше заданного количества комментов. А вот плагина, совмещающего функциональность обоих названных, я не встречал…
Дмитрий, я нашёл более безопасное решение: замени вызовы wp_redirect() на wp_safe_redirect(). После этого перенаправления на левые домены работать не будут.
Попробовал - не работает. Редиректит на страницу входа в админку WordPress.
А у меня почему-то не кодируются ссылки :( какимы были открытыми, такими и остались. Пробовал вот тот WP-NoExternalLinks но тоже не устраивает, что нету исключений для ссылок например с rel=”me”
Более рациональное решение - поставить баннерокрутилку (свою или скрипт какой-нить)
Ага, только вот если не енкодить ссылки, то при вызове ссылок с ГЕТ параметрами могут возникнуть серьезные проблемы, именно поэтому их и енкодят…
Очень полезный плагин, возьму потестить
Спасибо за хак! Поставил тоже у себя этот плагин и поправил код