Невидимый спам в комментариях - ссылки на пробелах

25 августа 2008 г.

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

И делают они это вовсе не стандартным способом.

Теперь у спамеров пошла “мода” на то, чтобы ставить свои ссылки в комментариях на пробелы, т.е. вот так:

1
<a href="http://spamer.cn"> </a>

Браузер представляет такую ссылку невидимой для пользователя (даже при выделении всего текста на странице пробел не выделяется), а в коде она есть, поэтому будет учтена поисковой системой, что и является целью спамера.

По сути, такие ссылки, будучи администратором сайта, выявить очень легко - для этого достаточно получать на свое мыло все письма, сообщающие о новых комментариях. В таких письмах спам-ссылки прекрасно видно, так как представлены они там в виде кода.

Кроме того, если на блоге стоит спам-фильт, типа Akismet, подобные спам-комментарии, по идее, должны сразу переноситься в спам.

Однако, не смотря на 2 вышеупомянутых обстоятельства (либо письма не приходят, либо не используется спам-фильтр) комментарии, содержащие невидимые ссылки, попадаются мне на некоторых блогах.

Пример

Вот так видели (до недавнего времени) комментарий на одном из блогов все пользователи, в том числе и админ блога:

Комментарий с невидимым спамом

А вот так увидел этот коммент я, используя специальный ява-скрипт:

Комментарий с видимым спамом

Каким мне видится решение проблемы

1. Написать плагин для WordPress, который бы фильтровал подобные ссылки (т.е. просто-напросто удалял) из текста комментария в момент публикации.

Минус данного решения я вижу в том, что в таком случае автор блога не узнает, что подобные ссылки публиковались, а, соответственно, не отправит спамера в положенное ему место (что, по идее, нужно делать).

2. Написать скрипт, который бы превращал эти невидимые ссылки в видимые, тем самым давая понять, что это спам-коммент. В данный момент у меня есть такой скрипт в двух вариантах исполнения: стандартным ява-скрипт-кодом (большое спасибо за него моему хорошему знакомому программеру) и скрипт, который я сделал сам на jQuery.

Их недостаток в том, что сложно четко ограничить их действие на определенный участок страницы, а на странице могут быть и вовсе не спам-ссылки на пробелах, которые связаны с особенностями дизайна сайта.

3. Написать плагин для WordPress (на PHP), который бы не вырезал эти ссылки, а просто выделял их, и в админ-интерфейсе, и прямо на сайте. Это, пожалуй, был бы самый лучший вариант, т.к. фильтроваться будет только текст комментариев.

Вот такие дела.

Ну что, есть желающие написать такой плагин? =)
У кого какие есть мысли по поводу темы статьи?

Обновление от 19.02.09

Вот готовая функция, которая выполняет то, что описано в 3-м пункте (см. выше). В файл functions.php своей темы добавьте следующий код:

1
2
3
4
5
6
7
function show_me_the_spam_links($comment) {
  return preg_replace(
    '#<a.+href=["\']?(https?:\/\/[^\s"\'\>]+)[\'"\s].+>[\s\.\,\_]*<\/a>#msiU',
    '<a href="http://anonym.to/?$1" title="Похоже на спам-ссылку" style="border: 1px dotted #F00 !important; background: #FF6 !important; padding: 2px 4px !important; color: #03F !important">$1</a>',
    $comment);
}
add_filter('comment_text', 'show_me_the_spam_links', 10000);

Все ссылки на пробелах, точках, запятых и нижнем подчеркивании становятся видимыми и выделяются особым цветом.

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

  1. Я недавно писал о таком спаме. Правда, лишь в виде оффтоповой заметки. Раньше смайлы вставляли, сейчас пробелы, а еще знаки препинания. У меня решение простое - я не публикую без проверки комменты, где есть хоть одна ссылка.

  2. OK, берусь за №3.

    Идея в том, чтобы преобразовывать <a href=”spamsite.com”>[набор из знаков препинания и пробелов]</a> в spamsite.com [набор из знаков препинания и пробелов], я правильно понял?

    Да, когда должно выполняться преобразование - на этапе сохранения комментария или на этапе отображения комментария?

    PS - предпросмотр комментария - прикольная вещь. Только экран дрыгается при переходе на новую строку :-)

    @
  3. У меня Akismet нормально ловит такие коментарии (:

  4. К чему такие сложности?
    1. Ставишь в настройках модерацию на одну ссылку (по умолчанию стоит две).
    2. В черный список добавляешь такой код

    1
    &gt; &lt;/a&gt;

    Этого достаточно, чтобы отловить пустые ссылки.

    ps Дима, добавь ссылку на rss-комментарии к записи. ;-)

  5. >1. Ставишь в настройках модерацию на одну ссылку (по умолчанию стоит две).

    поддерживаю, давно так сделал, а то замучали спамить на знаки препинания

  6. OK, берусь за №3.

    Отлично! ;)

    Идея в том, чтобы преобразовывать <a href=”spamsite.com”>[набор из знаков препинания и пробелов]</a> в spamsite.com [набор из знаков препинания и пробелов], я правильно понял?

    Да, абсолютно верно.

    Да, когда должно выполняться преобразование - на этапе сохранения комментария или на этапе отображения комментария?

    Думаю, лучше сразу же после того, как нажата кнопка “Отправить комментарий”, т.е. на этапе сохранения.

    PS - предпросмотр комментария - прикольная вещь. Только экран дрыгается при переходе на новую строку :-)

    В смысле смещение текста на экране?

    2. В черный список добавляешь такой код

    Макс, а это точно работает? :)

    ps Дима, добавь ссылку на rss-комментарии к записи. ;-)

    Ок, добавлю, знаю, ты их любишь =)

  7. Блин, я видел ссылки-знаки препинания в комментах, но пробелы нет. Наверное, просто не замечал. Еще одна забота появилась =((

    Вешать надо этих спамеров!

  8. Арнольд, ты их не замечал, потому что на хтмл-страницах они себя никак не выдают.

  9. Dimox, очень ждём Вашего плагина.
    Автору спасибо за статью, я как то и не задумывался о подобных спамерах.

  10. Да, голь на выдумку хитра.

    Тока, имхо, щас еще больше такого хлама появится, все спамеры щас так будут делать.

    Кстати, о каком ява-скрипте речь шла в посте? где его взять можно?

    @
  11. Я недавно отловил у себя пару комментариев с такой ссылкой:

    1
    <a href="http://spamer.cn" rel="nofollow"></a>

    т.е. даже без пробела. Смысл ставить такие ссылки? Врядли они учитываются поисковиками.

  12. Тока, имхо, щас еще больше такого хлама появится, все спамеры щас так будут делать.

    Это так, поэтому надо больше писать об этом, чтобы авторы блогов были, так сказать, во всеоружии :)

    Кстати, о каком ява-скрипте речь шла в посте? где его взять можно?

    Могу его выложить, но из-за минуса, о котором я писал в статье, он не совершенен.

    Кстати, благодаря данному скрипту, довольно интересно наблюдать, что некоторые блоггеры используют эту методику в своих постах, ставя ссылки на свой блог :) Вчера видел такой пример.

  13. Kalian, я, конечно, точно не уверен, но возможно, что учитываются.

  14. Dimox, выложи плиз куда-нить, пригодится.

    Зы, а ссылки все учитываются, имхо, тока мало толку от некоторых может быть. У меня яндекс залазит и в noindex и индексирует файлы, запрещенные в robots.txt, а потом на меня же ругается, мол кодировка и формат этих файлов неправильный….

    @
  15. TYUS, вот:

    1. стандартный ява-скрипт
    2. то же самое, но на jQuery

    Скрипт срабатывает только в двух случаях:

    1. Если в коде страницы имеется идентификатор “comment”. Как правило, данный идентификатор принадлежит текстовому полю для комментария на WordPress-сайтах.

    2. Если находимся в админке WordPress на странице модерирования комментариев, т.е. когда в адресной строке браузера присутствует “edit-comments.php”.

  16. Для желающих протестировать плагин (который №3 из статьи): скачать плагин можно здесь.

    Протестировал локально, вроде бы работает :)

    Плагин ловит “пустые” ссылки, а также ссылки на знаки препинания и другие символы, не являющиеся буквами и цифрами. Для того, чтобы плагин нормально работал, необходимо, чтобы кодировка блога была UTF-8.

    В черный список добавляешь такой код

    А если пробелов несколько? В HTML они будут отображаться как один, а регэксп их может уже не поймать.

    В смысле смещение текста на экране?

    Поле предпросмотра увеличивается, поле ввода скачет вниз. Особенно ощутимо, когда пишешь тэг типа <blockquote> Но это мелочи жизни.

    Смысл ставить такие ссылки? Врядли они учитываются поисковиками.

    Google ходит по всем href/src, будь они хоть сто раз пустыми или nofollow.

    @
  17. А может просто ко всем ссылкам приписывать в начале подчеркивание. Например

    _http://adsense.su

    Тогда ссылку смогут открыть только люди, если это им нужно конечно, а поисковик будет игнорировать.
    Давно уже такой плагин ищу. Подскажите если есть где то.

    @
  18. Помоему автор пропалил тему, не все знали об этих ссылках, вот и на моем блоге появились подобные недавно…

  19. Вот если бы спамера его же оружием “прибить”, чтобы его продвигаемый ресурс банился поисковиками - по моему самое классное наказание, никто не захочет рисковать. Хотя с другой стороны, используя этот метод, можно “утопить конкурентов”.
    Мочить их надо:)

  20. Спасибо. Не знал. Буду иметь ввиду.
    Хотя, что касается блогов на WordPress, то в этой cms (в комментариях)по умолчанию используется тег nofollow, а значит поисковиками эти ссылки не учитываются. Так что пусть “шлёпают” если заняться нечем.))
    А вот когда люди убирают на своих блогах nofollow, то… извините, как говорится - “за что боролись…”.

  21. Dimox, спасибо, попробую скриптик. Тока блога у меня нет, может переделаю скрипт для повседневных нужд

    ЗЫ. блин уже два раза забываю вписать код от спама :)

    @
  22. У меня комментарии показываются как HTML - так что я всегда отлавливаю.

  23. Tod, а как ты это сделаешь? Есть идеи? :)

    cpu-7990, можете забыть про nofollow, так же, как и спамеры, которым до фени, есть он или нет.

    TYUS, скрипт можно встроить в Оперу или FireFox (через UserJS), если вы пользуетесь одним из них.

    cross, это как так?

  24. Dimox, а надо ли тебе объяснять, что они придумают новые способы? Тебе ли не знать :)

  25. Kaban, ну это ясное дело. Как придумают, так и сделаем новую защиту =)

  26. Ужас какой-то! Счас пойду в настройках WordPress’a поставлю на одну ссылку.
    И у меня люди совсем наглеют комментарий впрямую пишут, типо:
    На нашем сайте вы можете найти и.т.п

    Давно этих спамерров убивать нужно

  27. Vladimir, я потестировал плагин - не наблюдаю никакого результата. Тестировал и на Денвере, и в Интернете.

  28. Дожились) интересно как будут спамить дальше)

  29. А еще лучше, если плагин просто не будет добавлять комментарии, которые содержат ссылки с пустым анкором. Ведь нормальный человек не будет ставить такие ссылки.

  30. Во блин. А как вордпрессе лучше вручную код комента посмотреть (не доверяю автоматике)?
    Кстати, насколько я знаю, ссылка на пробеле/одном символе/картинке 1х1 пиксель, текст цвета фона и т.д. - прямой путь в баню(((

  31. Дмитрий, посмотреть можно через соответствующую опцию в браузере.

  32. Тестировал и на Денвере, и в Интернете.

    Ммм, а какая версия PHP? И собран ли PHP с поддержкой UTF-8?

    Кстати, насколько я знаю, ссылка на пробеле/одном символе/картинке 1х1 пиксель, текст цвета фона и т.д. - прямой путь в баню(((

    Не очень прямой - иначе так можно было бы бороться с конкурентами

    @
  33. Ммм, а какая версия PHP?

    В обоих случаях 5-я.

    И собран ли PHP с поддержкой UTF-8?

    Не понял вопроса.

  34. В обоих случаях 5-я.

    А какая 5? Например, PHP версии младше 5.1.0 и 4.4.0 не поддерживают символьные классы UTF-8.

    @
  35. На денвере - 5.2.4.0, на хостинге - PHP/5.2.0-8+etch11. Получается же, что у тебя не универсальное решение, т.к. у многих могут стоять как раз диапазон версий, который ты указал.

  36. Это как посмотреть… В старые версии PHP идут только security fixes и бэкпорты критических багов, и их в любом случае нужно обновлять.

    А к UTF-8 я привязался потому, что существует далеко не один вариант пробелов и символов пунктуации - взять те же кавычки - в Юникоде их несколько версий.

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

    PS - а версия WordPress 2.5? Буду тестировать дальше.

    @
  37. PS - а версия WordPress 2.5?

    2.6.1

  38. Меня товарищи спамеры уже одолели.. Ссылки в точах, смайликах, буквах.
    Про мыло конечно вариант, но если таких писем 300-400 в сутки будет приходить?..

  39. У меня каждый день на один из моих блогов приходит спам ввида “buy viagra” причём в огромных количествах,благо все коменты приходят ко мне на почту , вопрос если я сразу не модерирую коменты, эти ссылки(т.е. до модерации)Будут учитываться поисковыми робатами(например гуглом) ?

    @
  40. Швейцар, поставьте Akismet и подобные комменты больше не будут беспокоить.

    если я сразу не модерирую коменты, эти ссылки(т.е. до модерации)Будут учитываться поисковыми робатами(например гуглом) ?

    Нет, конечно.

  41. Dimox, да плагин стоит единственное что версия Wp старенькая…может по этому проходят….

    @
  42. Хотелось бы такой плагинчик, чтобы можно было видеть ссылки в пробелах.

    @
  43. Во-первых, написать скрипт который бы отлавливал все варианты “невидимых” символов очень трудно. Например - & nbsp; не будет отображаться в браузере, а в скрипте будет выглядеть как текст.

    Во-вторых, я для себя нашел такое решение - в CSS прописал стиль который выделяет фон ссылки красным цветом, чтобы не пропускать пустые ссылки предусмотрел небольшой отступ слева и справа (внедрил недавно, поэтому не знаю на сколько эффетивно решение).

  44. Когда я добирался до этого сайта пришлось пройти два раза через его зеркала. И для меня текст в зеркалах выглядел так:
    т пихать свои ссылки в текст комментария. И делают они это вовсе не стандартным способом. Теперь у спамеров […] (далее ссылка на следующее зеркало)
    :) думал, что автор имеет ввиду именно такой способ оставлять ссылки а не ““. Тоже хороший способ.

    @
  45. а чем не устраивает плагин, который ссылку выводит посредством яваскрипта? или гугль и яндекс их всеравно учитывают?
    вот - меня например спамят пустыми линками..
    типа
    > Люба Says:
    September 3rd, 2008 at 3:13 pm
    Полезная тема, подходящий дизайн, успешный сайт. Добавлю в избранное и порекомендую друзьям!

    а в сырце после обработки явой получим ссылку через write() плагин не помню как называется , но он делает ссылки не прямыми ..
    alert(’aaa’);

  46. 46
    Сыктывкарский бомж

    видимо биржи типо bbetter_ это поощряют. это жулье

  47. а как еще можно бороться со спамом в коментах, кроме капчи и ввода решений как тут 6+10 ? а то у меня есть один сайт на Wordpress так там уже 37 коментов как спам я пометил и не одного нормального нету, все от тупых ботов (

  48. Dimox, когда кто-то оставляет комментарий, на почту приходит письмо уведомление, содержащее сам комментарий в plain text. Весь HTML налицо. Заметить такие ссылки и убить несложно.

  49. Daemony, об этом в статье написано.

  50. Мне тут не успел поставить блоги на следующий день повалили комены.
    Вот незнаю как их отрубить
    щас поду выключу если это возможно

    @
  51. Сайт, указанный при комменте ботом, учитывается поисковыми системами ?

    @
  52. Хм… Про всякого рода знаки припинания знал давно… По 100 штук на день грохал…
    Пробелы удивили… Я и представить себе не мог, что так вот можно сделать…
    Думаю, плагин нужен однозначно… Антипробелом обозвать и широко пропиарить…

  53. Не пойми не правильно - но <a href=”http://spamer.cn” rel=”nofollow”> </a> лучше как-то завуалировать, а то наплодишь спамеров больше чем убьёшь :)

  54. ну ничего себе! Может для кого то и не новость а я вот удивлена. Только вот чего не понимаю- если на комментах ноуфоллоу стоит то смысл то всех этих ссылок???

  55. maviska, смысл в том, что спамеры не проверяют, стоит ли на ссылках noindex или nofollow. К тому же если стоит просто nofollow, то это не мешает поднятию тИЦа.

  56. ух, какие сложности, не проще ли запретить юзать хтмл или в частности “а” тег, вот и всё. И ещё, анкор в виде пробела большого прироста не даст, хоть и увиличит ссылочную массу со вкусных блогов, вобщем много от такого подхода не добьёшься, люди просто экспериментируют, думаю этот спам не долго продлится.

  57. Я просто в настройках поставил где есть задержка комментариев что на одну и более ссылок коммент задерживает. Да и вообще все комменты с модерацией.

  58. Спасибо за такой пост, не знал что это возможно, покопал у себя на сайте и нашел такие комменты.

  59. Я недавно отловил у себя пару комментариев с такой ссылкой:

    1
    <a href="http://spamer.cn" rel="nofollow"></a>

    т.е. даже без пробела. Смысл ставить такие ссылки? Врядли они учитываются поисковиками.

    nofollow - для поисковых роботов означает не индексировать страницу на которую идет линк, но наличие линка всё равно попадет в статистику и соответственно будет отражено в GooglePR и ИЦ Yandex, что собственно и нужно спамерам

  60. на этапе вывода комментария надо вставить что то типа

    1
    $comment= preg_replace("/<a [^>]+>[\s\.\,\_]*<\/a>/is", "", $comment);

    нерегулярным выражением убиваем любую ссылку с пробелами

  61. 62
    Анатолий

    Написать не напишу, но такой плагин хотелось бы заиметь :)

  62. а для DLE есть чтото подобное? а то задолбали уже

    @
  63. Как по мне, то капчу в любом случае ставить нужно … Ну, а вобще, порой такие комменты оставляют что сложно отличить от спама …

  64. Спасибо.
    А для Joomla 1.5 есть подобное решение?

    @

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

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

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

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

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

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