Боремся со спамом с помощью CSS

19 февраля 2008 г.

Борьба со спамом - это то, с чем сталкивается почти каждый владелец сайта, на котором разрешено комментирование. Самый популярный и эффективный (?) способ борьбы со спамом - использование специального изображения капча, информацию с которого комментатор должен ввести в предусмотренное для этого поле. С тех пор, как появились алгоритмы OCR, которые позволяют распознавать текст на изображении, на капчах стали выводить “грязный” и искаженный текст.

Для справки:

OCR (англ. Optical Character Recognition - Оптическое распознавание символов) - механическая или электронная конвертация изображений символов и букв в текст, редактируемый на компьютере. Перевод осуществляется программным путём, после получения изображения со сканера или фото.

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

Новое решение

“Грязный” и искаженный текст может раздражать пользователей и препятствовать тому, чтобы они оставляли комментарии. Еще одна вещь, которая заставляет подумать дважды, когда заходит речь об использовании некоторых из существующих вариантов капчи, - тот факт, что вы не можете контролировать их внешний вид.

А как на счет того, чтобы призвать на помощь технологию CSS.

Уловка, использующая CSS, внешне практически не отличается от стандартного способа отображения капчи. Но, тем не менее, есть большое различие в результате.

Как было сказано выше, существует технология OCR, которая распознает символы на изображениях. Но для того, чтобы эта технология работала, необходимо наличие самого изображения, что логично.

Теперь начинается самое интересное. Изображение капчи нужно выводить не тегом <img>, как это делается везде, а использовать его в виде фонового изображения, заданного с помощью CSS.

И в результате OCR не сможет ничего распознать. Согласитесь, что вряд ли робот обучен тому, чтобы сначала просканировать html-код, определить расположение вашего CSS-файла, сравнить CSS-селекторы, найти нужно CSS-правило, определить расположение изображения и прочитать его, используя OCR.

Вот простой пример использования данного метода.

HTML код

1
2
3
4
<p>
  <label class="captcha" for="captcha">Введите сумму чисел на изображении</label>
  <input type="text" name="captcha" id="captcha" />
</p>

CSS код

1
2
3
4
5
6
7
label.captcha {
  display: block;
  background: url(i/captcha.gif) no-repeat;
  height: 28px;
  line-height: 28px;
  padding-left: 90px;
}

Положительные стороны

Плюсы метода заключаются в том, что можно легко самому задать нужный внешний вид капчи, поместить на изображение свой собственный текст, простую математическую функцию и т.д. И робот при этом не сможет ее разобрать, т.к. изображение выводится с помощью CSS.

Недостатки

Единственный минус метода заключается в том, что при просмотре сайта через браузер с отключенной поддержкой CSS (такие вообще часто встречаются?), не поймут, что вы просите их сделать. Т.е. используя этот трюк, вы препятствуете добавлению комментариев частью вашей аудитории.

VIA

* * *

На веб-сайте progam.ru вы найдете всегда актуальные новости компьютерных игр. Здесь публикуются скриншоты, трейлеры, видео, саундтреки к играм.

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

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

  1. Ага. Еще есть большой недостаток: если я бегаю с отключенными картинками, то капчу я загрузить смогу, а фоновый рисунок - нет. Поэтому отсекаются не только юзеры с отключенной поддержкой CSS (ну и хрен с ними, с идиотами), но и юзеры, с отключенными картинками. А таких уже довольно много. Например, я сейчас смотрю эту страницу с отключенными картинками, потому что из дома, где траффик платный.

  2. Я не программер, но, вот этот абзац, при прочтении, был, как будто, “призыв к работе” :)

    Согласитесь, что вряд ли робот обучен тому, чтобы сначала просканировать html-код, определить расположение вашего CSS-файла, сравнить CSS-селекторы, найти нужно CSS-правило, определить расположение изображения и прочитать его, используя OCR.

    Я еще раз повторюсь, я не программер, может сделать то что сдесь написанно нереально сложно, но это, мне кажется, прозвучало типа так: Ваша программа не умеет этого делать, а почему?

    @
  3. своевременная статья, а то спамеры уже доставать начинают

  4. SHAman, да, я согласен. Но ведь невидимость картинки подразумевает, что в браузере на данный момент нужно бы влючить отображение картинок. Конечно тут получается разница в том, что тогда придется загружать и все остальные картинки с сайта, чтобы увидеть капчу. И в этом, несомненно, тоже минус. Я сам, кстати, постоянно смотрю сайты без загрузки картинок. Но у меня в Опере стоит скрипт, который позволяет загружать фоновые рисунки, причем только нужные, без загрузки остальных.

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

  5. [quote post=”774″]своевременная статья, а то спамеры уже доставать начинают[/quote]

    Aга, особенно такие как вы, со своими литературными порталами.

  6. А как на счет кеширования? Проблем не будет?

  7. Прикольная идея! :)

  8. Neutrino, с кешированием проблем быть не должно, если скрипт выводит нужные заголовки. Ведь капчу нужно генерить все тем же скриптом капчи. В принципе, вам не нужно менять скрипт. Вам нужно менять html и css.

  9. Neutrino, а какие должны быть проблемы с кешированием? Ведь подразумевается, что мы будем юзать статическую, заранее подготовленную картинку. В этом суть. Можно посмотреть, как это реализовано, у автора статьи.

    Если картинку будем при каждом выводе генерить автоматом с постоянно меняющимся текстом, то, естественно, встает вопрос кеширования.

  10. А что это за капча такая, со статической картинкой?

  11. ))) Юрий, а что, такой капчи не может быть?

  12. Думаю, не может :) Или может, но толку от нее? Пишется бот, который в поле прописывает уже правильный ответ (картинка-то статическая)

  13. >>Юрий, а что, такой капчи не может быть?

    Вообще-то, я думал, что предполагается прописывание в CSS адреса к скрипту, который генерирует капчу. А какой смысл использовать одну единственную картинку? Дело в том, что спаммер - он хитрый. Ему не лень зайти и посмотреть картинку, чтобы вбить ее в программу. А потом - берегитесь. А для спасения от неиндивидуальных ботов есть более простые методы. Например, ложные поля.

  14. А чем не устраивает капча с необходимостью математического вычисления, как сейчас здесь стоит?

  15. Так для каждого сайта будет свой подход к созданию этой статической капчи, это наверняка. Неужели автор бота будет разыскивать и писать бота под все варианты такой картинки? Запарится, ИМХО.

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

  17. Злой способ.. надо заюзать, хотя аксимет неплохо справляется ))

  18. Хм, что-то новенькое - не слышал до этой статьи о таком способе. Минус включенности цсс для современных пользователей интернета думаю надуман - без включеннего цсс можно забыть о нормальном сёрфинге в Инете, как собственно и с отключенными картинками.

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

  19. >>можно забыть о нормальном сёрфинге в Инете с отключенными картинками.

    Категорически не согласен. Дома постоянно сижу без картинок. И не чувствую себя ущемленным. Иногда, сайт без картинок, кстати, смотрится даже лучше, чем с картинками:) Ну и загрузка быстрее. А про экономию трафика я молчу.

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

    На счет отключенного цсс - согласен. Ни разу не видел идиота, который бы его отключал.

  20. [quote post=”774″]На счет отключенного цсс - согласен. Ни разу не видел идиота, который бы его отключал.[/quote]

    Тоже согласен =)

  21. Ещё один вариант более приспособленный для пользователей с отключённой графикой: вместо лейбла с бэкграундом грузить iframe, где нормальную картинку ставить. Так, как и ваш способ сломать можно, но под конкретный проект делать парсер вряд ли будут, а если будут, то можно усложнять и это.
    Ну и конечно автоматически генерируемые имена полей и их расположение тоже забывать не надо…

    @
  22. Народ! Боты давно уже парсят CSS. Тут ничего такого нет.

    У меня есть идея генерить ASCII-ART для этой цели :)

    @
  23. Я вообще против капчи. Но для поклонников самое оно, заодно и народу лишняя вилка в зад, чтобы к css приобщаться :)

    ЗЫ
    Нафига, вообще в браузерах, функция выключить CSS.

    ЗЗЫ
    С тысячой поздравляю )

  24. Интересный способ борьбы со спамом. Я на данном моменте остановился на Akismet и премодерация для первого коммента юзера и вроде пока не сильно много комментов всё нормально и плагин отсеивает хорошо хотя и зачастую нормальные комменты.

  25. У меня есть идея генерить ASCII-ART для этой цели :)

    Давай, твори, интересно посмотреть на реализацию ;)

    Но для поклонников самое оно, заодно и народу лишняя вилка в зад, чтобы к css приобщаться :)

    Здорово сказал =)))

    С тысячой поздравляю )

    Спасибо!

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

    плагин отсеивает хорошо хотя и зачастую нормальные комменты

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

  26. Ого… жестокая там капча

  27. >Вот единственное что плохо, что в перспективе, если технология возымеет популярность, >то начнут делать роботов, которые будут обходить и её, ведь найти нужный селектор в >цсс-е и сделать нужный отступ от спрайта, согласитесь, длеко не архисложная задача…
    Ну пока не сделали надо пользоваться ), в любом случае для чего угодно их сделают.
    [quote comment=”2790″]А вот mail.ru ввел новую капчу: http://win.mail.ru/cgi-bin/signup/quote
    Да там жесть, повидимому их очень серьезно достали боты.

  28. Ерунда какая-то со статичной картинкой. Намного интереснее использовать приемы вообще без капчи, как в этом блоге. Чтобы искусственный интеллект вообще не справился.

    Только не использовать 4+10 = ? как в этом блоге… А, например, такой вопрос: “Напишите первую букву доменного имени этого блога”.

    Если даж со временем кто-то нибудь пропишет правильный ответ в спамилки, не составит труда сменить вопросик на какой-нибудь другой.

    Именно по этому принципу я настроил “анти-спам бот” в QIP, и избавился от спамеров. Теперь осталось тож самое сделать для формы и всё.

    Как вам?

    @
  29. Ну почему вконце поста, не сделать принскрин или дать линк на урл?

  30. Вот уж не знаю, капча по моему не больно то останавливает тех кому надо наспамить. Вот у меня есть предложение сделать так чтобы капча просто выглядела сложным хитрым сочетанием тэгов, с классами CSS, любым мусором. К примеру капча PREVED будет записана N<b>A</b><b>S</b>PRE<i>V</i>EHEHE тут ещё надо класс hidden запрятать куданибудь поглубже. Естественно всё это должно быть ещё более запаренным, можно даже нестандартный шрифтик для этого дела подшить. Одним словом, как альтернатива… Делать эту капчу бакграундом и потом париться оттого что она кэшируется, хех, имхо не много толку.

    @
  31. Подобного рода боты есть уже давно: загружают страницу, выцепляют css файл, находит id или класс, берут картинку, распознают ее. Да и вообще это не решение )))

    @
  32. А я себе антиспам поставил - в виде галочки я не бот!

  33. а я сам использовал этот метод давно только еще в чем косяк этого метода то что если человек не разберет что написано на картинке загрузить новую картинку без перезагрузки страницы нельзя!

  34. JS - возможно всё, а про то, что изображение можно обновить отдельно от страницы средствами браузера далеко не каждый пользователь осведомлён.

    @

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

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

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

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

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

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