Редирект с помощью плагина (J)ExR и спамеры

23 июня 2009 г.

Довольно приличное время пользуюсь плагином (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');
}

Проверил - вроде бы работает, как надо.

Теги: , , , автор: Dimox | рубрика WordPress

Комментарии (19): »

  1. 1. А если браузер не шлёт/файрвол рубит реферера?
    2. Если версия PHP позволяет, вместо strstr() лучше использовать stristr(). Либо делать strtolower() для обоих параметров.

    @
  2. Спасибо за хак к плагину. ))

  3. А мне больше нравится wp-noexternallinks - то что ссылки не кодируются а остаются в виде - http://YourBlog.com/goto/http://gmail.com

  4. 1. А если браузер не шлёт/файрвол рубит реферера?

    Получается, что это проблема юзера. Можешь предложить более рациональное решение?

  5. Спасибо, надо будет попробовать.

  6. Попробуй, это более этичный вариант для блога, вроде и ссылки внешние скрываешь и даешь посетителю шанс увидеть источник или ссылку куда он переходит… (J)ExR больше подходит когда приглашаешь рефералов, ведь находятся деб..лы которые не хотят стать чьим нибудь рефералом (на душе у них будет не спокойно) и стирают твой инвайт код.

  7. Посмотрю на плагин — скажу, пока не знаю.

    Самое простое, что приходит на ум, не видя код — проверять, не пустой ли реферер. Если пустой, то устанавливать обработчик; если не пустой — идем по твоему варианту.

    @
  8. Ясно. Я, в принципе, и сам это могу сделать.

  9. По поводу видимости ссылок согласен, именно поэтому я у себя отключил jExR.
    PS. Я, кстати, один из таких деб..лов :)

  10. Спасибо очень нужная вещь на выходных устанавлю себе!

  11. Похакал у себя плагин. Пасиба ;)

    @
  12. Хех, зашел к тебе в блог, чтобы поинтересоваться насчет подобного плагина и нашел ответ в комментах =) WP-NoExternalLinks - практически то, что нужно. Жаль, там нет возможности автоматически отключать маскировку адреса для тех, кто оставил больше определенного количества комментов. “Белый список” нужно составлять ручками…

    ЗЫ: есть еще Comment Link Manager, который как раз-таки выводит ссылки только для тех, кто написал больше заданного количества комментов. А вот плагина, совмещающего функциональность обоих названных, я не встречал…

    @
  13. Дмитрий, я нашёл более безопасное решение: замени вызовы wp_redirect() на wp_safe_redirect(). После этого перенаправления на левые домены работать не будут.

    @
  14. Попробовал - не работает. Редиректит на страницу входа в админку WordPress.

  15. А у меня почему-то не кодируются ссылки :( какимы были открытыми, такими и остались. Пробовал вот тот WP-NoExternalLinks но тоже не устраивает, что нету исключений для ссылок например с rel=”me”

    @
  16. Более рациональное решение - поставить баннерокрутилку (свою или скрипт какой-нить)

    @
  17. Ага, только вот если не енкодить ссылки, то при вызове ссылок с ГЕТ параметрами могут возникнуть серьезные проблемы, именно поэтому их и енкодят…

  18. Очень полезный плагин, возьму потестить

  19. Спасибо за хак! Поставил тоже у себя этот плагин и поправил код

Присоединяйтесь к обсуждению!

Отправляя кoммeнтapий, Вы автоматически принимаете правила кoммeнтиpoвaния на этом блоге.

Правила кoммeнтиpoвaния на блоге dimox.name:

  1. Первый кoммeнтapий всегда проходит премодерацию.
  2. В поле "URL блога" можно указывать только ссылку на главную страницу вашего блога. Ссылки на прочие веб-ресурсы (в том числе блоги/сплоги, созданные не для людей) будут удалены.
  3. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова. В случае несоблюдения этого условия имя изменяется по усмотрению владельца блога. Просьба указывать нормальное имя или ник.
  4. Весьма вероятно, что короткий и неинформативный кoммeнтapий вида "Спасибо!", "Интересная статья", будет удален. Исключение составляют знакомые автору блога комментаторы.

Подписаться, не комментируя

Предыдущие из рубрики