Метод ловушек для избежания капчи

Posted on December 24, 2009
Большинство автоматизированных рассылателей спама работают так:
  • Ищем в поисковике форму отправки комментария
  • Заполняем основные поля (Nick, Website, Comment)
  • Отправляем и злобно хохочем
На некоторых известных блоговых движках (например wordpress) в день можно получить до 500-600 комментариев спама, что очень не радует.
Обычно для того, что-бы избежать закидывания спамом ставят капчу, но при стоимости разгадывания 1000 капч в 1$ (да, есть специализированные сервисы) это становится неактуально, да еще и напрягает посетителей.
Гораздо выгоднее и интереснее использовать так называемые ловушки. Ловушки представляют из себя какие-то части страницы, которые обычный браузер выполнит или загрузит, а спамбот обойдет мимо. Для ловушки хорошо подходят:
  • Javascripts
  • css
  • iframe
  • элементы формы
  • собственно страница с постом

Javascript ловушки

Если посмотреть на вызов javascript файла, то можно увидеть, что зачастую он выглядит так:

<script type="text/javascript" src="/js/main.js?pack=0.0900618207722769"></script>
Что тут может послужить ловушкой? Во первых - сам файл. Он может отдаваться сервером, а при хорошем разбросе параметров мы можем точно знать 2 вещи:
  • К файлу обратились
  • Передан параметр (если хранить его в сессии, то можно узнать верен ли он)
Дополнительно можно внутри отданного файла сделать какие-либо манипуляции с формой, например добавить параметр. Оригинал статьи

CSS

В CSS ловушки возможны так-же как и в JS, дополнительно можно загружать из него какие-либо ресурсы и отслеживать их получение.

Iframe

Тут можно полностью доверится своему воображению - подгружать JS, менять с помощью подгрузки какие-либо параметры, задавать Flash cookies (отслеживать уже после отправки комментария) и прочие вещи.

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

"Защитите мой сайт от копирования" или как объяснить заказчику что это интернет

Posted on February 27, 2009
Время от времени от заказчиков на сайты мне приходит пожелание сделать так, что-бы их тексты нельзя было скопировать с сайта.

Понимающему человеку эта проблема покажется смешной, но как объяснить это человеку который не очень образован в сфере IT?

Хорошо подходит аналогия сайта с журналом - тому кому надо, тот обязательно перепечатает или отсканирует и распознает нужную ему статью или картинку.

Тем не менее регулярно появляются "специалисты" которые утверждают что такое возможно. Рассмотрим их способы:
  • Отключение возможности нажать правую кнопку мыши
  • Отключение возможности выделить текст
  • Вывод текста картинкой/набором картинок
  • Закрытие текста сверху прозрачным div
Итак, рассмотрим эти способы:

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


Несмотря на кажущуюся простоту метода работает он крайне нестабильно и основывается на перехвате события правой кнопки. В разных браузерах это реализуется по разному.
Например для Internet Explorer он выглядит так:

function click() {
if (event.button==2) {
alert('Sorry, this function is disabled.') }}
document.onmousedown=click;
Естественно, что обойти это можно элементарным Ctrl-C (или под Mac CMD+C)
А так-же просто сохранив страницу целиком или скопировав HTML код нужной части.

Отключение возможности выделить текст


Этот способ так-же базируется на яваскрипте и поэтому крайне ненадежен (пользователь может их просто отключить).
Пример такого способа можно посмотреть на онлайн библиотеке Fiction Book
Естественно что и он при желании обходится просто.

Вывод текста картинкой/набором картинок


Способ довольно глуп по нескольким причинам, картинку можно легко распознать программой распознавания текстов, к тому-же это влечет к тому-что поисковые системы будут игнорировать сайт и он не попадет в поиск по тексту. Так-же пользователи которые отключают картинки будут очень расстроены не увидев ничего. Одной из модификаций этого способа является вывод во flash или через Javascript.

Закрытие текста сверху прозрачным div


Способ базируется на возможности через css поместить один элемент под другой. Например:

<html>
	<head>
		<title>My very secret page!</title>
		<style>
			.content {width:600;height:600;overflow:scroll}
			.glass {width:600;height:600;position:absolute;left:0;top:0;z-index:1000}
		</style>
	</head>
	<body>
		<div class="content">Text text text</div>
		<div class="glass"> </div>
	</body>
</html>
Текст будет лежать снизу, но это не поможет при копировании его через исходный код страницы.

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


Так что гоните таких "специалистов" в шею!

Обзор микрофреймворка Sinatra

Posted on February 09, 2008
Все мощности рельсов иногда не требуются. Особенно если сайт - не что иное как 3-4 странички текста и форма отправки комментариев. В таком случае может очень помочь какой-либо микрофреймворк, например camping или Sinatra. Фреймворк выполнен на базе Rack который позволяет не беспокоится о способе коммуникации между веб сервером и фреймворком. Поэтому общий объем исходных кодов и тестов занимает 384 килобайта. По потреблению памяти Sinatra так-же очень непривередлива. Начать писать на Sinatra очень легко

require 'rubygems'
require 'sinatra'

get '/' do
  'Hello from Sinatra'
end

После запуска этого файла через комманду ruby test.rb Sinatra откроет порт 4567 и ответит на GET запрос /
Так-же Sinatra абсолютно нормально поддерживает запросы POST, PUT, DELETE
Роутинг очень похож на роутинг у camping.
Так-что мой выбор для небольших проектиков - sinatra.