Хроники лаборатории
Вкратце о текущем состоянии дневника:

В связи с загруженностью очень интересной работой, почти перестал вести блог. Но, как легко убедиться, пролистав блог слегка назад, так было не всегда.
записи за 2007 // все записи
страница: 1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
Отпустим лето

Две недели. Уже целых две недели погода будто застыла в ожидании чего-то. Уличный термометр седьмой день упорно показывал «плюс пять», причем с точностью до градуса. Лужи не замерзали, снег не шел, и вообще - природа была неестественно, по-машинному стабильна. Не то чтобы это сильно кому-то мешало в огромном городе, скорее даже наоборот, но внушало некоторые опасения. Ведь закон сохранения энергии и вещества еще никто не отменял, и просто так, забесплатно, ничего не происходит, это вам любой школьник скажет. Поэтому большинство горожан слегка насторожилось: мол, что последует за такой затяжной осенью? Не меньше народу задавало себе и другой вопрос - почему такая аномалия происходит? Дикторы по телевидению водили руками над картами, бормотали что-то маловразумительное про антициклоны и массы теплого воздуха, но эти объяснения только рождали новые вопросы. Например, откуда берутся эти самые удивительно выровненные по температуре теплые массы в таком количестве?

Нет, я не скажу, что был единственным, знающим причину происходящего. Ира тоже догадывалась. Но не верила. Как не верил поначалу и я. Да и кто в такое в здравом уме поверит?..

С Ирой я познакомился этим летом. Случайно и как-то по-дурацки. Она из тех людей, которые искренни до невозможности. Иногда даже страшно становится, когда чувствуешь всю необъятность этой искренности: будто вот чуть-чуть, и не станет девушки, останутся только Естественность, Искренность и Открытость чистой энергией, каким-то теплым излучением. Как-то почти сразу мы привязались друг к другу, но о чем-то большем даже речи быть не могло: во-первых, у нас обоих уже было по обожаемой половинке, а во-вторых, по части семьи и сопутствующим ей вопросам у нас были настолько разные взгляды, что развитие этой темы оказывалось сродни священной войне и крестовому походу вместе взятым. Так что для описания взаимоотношений нам вполне хватало термина «родственные души». В первую же встречу Ира заявила:

- А пойдем на крышу!

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

Сидя на крыше, вдыхая теплый ветер и рассматривая неторопливую смену суетливого дня густым вечером, а вечера - ночью с желтыми глазами окон окрестных домов, я заново привыкал к давно забытому ощущению - к удивлению. Я удивлялся, почему сам так долго не вспоминал о крышах. Школу буквально пару лет назад закончил, и поди ж ты - все, такой взрослый и скучный, некогда на крышу забраться, оглядеть суету огромного города с высоты старенькой высотки... Мы молчали - каждый о своем. Молчание бывает разное, это всякий на себе чувствовал не раз - молчание тревожное, молчание натянутое, неловкое молчание... Здесь было очень насыщенное молчание, мы впитывали происходившее вокруг лето всеми органами чувств, всеми нервами, всеми порами. Когда мы насытились, было уже за полночь, а последние пару часов на крыше мы беседовали, дорисовывая фразами-штрихами картину уходящего (а точнее, к тому моменту уже ушедшего) дня, а после разбрелись по домам.

За лето мы виделись еще пару раз, но подобного «дня-ощущения» больше не было. Но нам хватало впитанного. Те летние беседы многое сдвинули внутри меня, привели в действие какие-то механизмы, о которых либо не знал, либо основательно подзабыл... Даже сама по себе Ира заставляла задумываться о таких вещах, которые всю жизнь считал естественными, а тут вкупе с вечером на крыше и вовсе... Ира тоже твердила, что разговоры со мной, мои советы многое прояснили в ее жизни, хотя и не представляю, что в жизни такого открытого существа может оставаться неясным. В общем, это было очень знаменательное лето. Очень хорошее и очень знакомое, доброе, как будто оно было еще одной родственной нам душой.

И, видимо из-за этого «родства» получилось так, что мы заперли в себе по кусочку очень важного для себя лета. Небольшие вроде бы кусочки. Крепко заперли, вцепившись всей ноющей тоской сердца, крепко стреножили ностальгией. Стоит закрыть глаза, расслабиться - и в лицо уже пахнуло теплым ветром крыш, и снова солнце уступает очередь луне, и снова суета города сменяется слабым сонным шевелением. Такой маленький комочек лета. И - оказывается - такой большой. Этот день живет в нас. Но - и вокруг нас.

Странно прохладный августовский день с температурой «плюс пять»...

Я нашел в мобильном номер Иры и нажал «вызов».

- Алло? - тут же отозвался знакомый голос.

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

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

- Давай часиков в шесть, после работы, ага?

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

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

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

- А?.. - она рассеянным жестом убрала прядку волос за ухо.

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

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

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


Всю ночь шел снег. А утро встретило сонный город легким ветерком и морозцем - одиннадцать градусов ниже нуля. Как и следует нормальному декабрьскому утру.


комментарии: 0 RSS HTML рубрики: рассказыjuick twitter facebook вконтакте
Так ли нужен CAPTCHA?

Статья была написана для HostInfo.ru.

Часто ли вам приходится сталкиваться с работой CAPTCHA-систем? Это такие системы скриптов, задающие загадки и генерирующие трудночитаемые картинки с цифрами, буквами и прочим безобразием, и сверяющие потом то, что вы ввели, с эталоном. В частности, таким образом сайты обороняются от автоматизированной рассылки рекламы по форумам и гостевым, отделяя добропорядочных пользователей от спам-программ. Считается, что автоматический тест Тьюринга крайне осложняет жизнь спам-программам, поэтому CAPTCHA сейчас используется довольно широко, заставляя вглядываться в напрочь зашумленные надписи, гадая, что на этот раз имеется в виду - единичка или латинская строчная «эл».

Но на всякий хитрый «картинкогенератор» рано или поздно находится своя управа, и правильный ответ найдется: либо перебором, либо разбором механизма генерации картинок, либо еще через какое-нибудь «заднее крыльцо». И преграда для автоспамеров становится лишь раздражением для посетителя ресурса. Ухватываете суть проблемы? В погоне за спамоустойчивостью удобство пользователя как-то само собой отошло на второй план. Лично мне не особо по душе лозунг «это для вашей же безопасности», поэтому сегодня я поделюсь с вами устройством более дружелюбного для пользователя механизма.

Для начала давайте немного поразмышляем: в чем отличие программы от настоящего, живого человека?

Проследим поведение обычного пользователя. Человек открывает страницу с формой для добавления какой-либо записи(в гостевой, на форуме и так далее), видит поля (для простоты возьмем самые распространенные) «Имя», «E-mail», «Сообщение». Он вводит в эти поля информацию и нажимает кнопку «Отправить». И все, сообщение появляется там, где пользователь и планировал его добавление(в гостевой, на форуме и так далее).

Что делает спам-программа? Она загружает страницу, определяет, какие механизмы защиты использованы, и делает свое черное дело. Главное отличие программы от человека в том, что она воспринимает страницы как последовательность букв, слов, строк - среди слов она по заранее заданному алгоритму может найти ссылку на заветное «добавить комментарий», пройти по ней и вписать пару фраз рекламы и ссылки в соответствующие поля, так же аккуратно найти на странице кнопку отсылки сообщения и эмулировать ее нажатие. Причем многие программы автоматически находят пригодные для «гнездования» сайты и добавляют их в свою базу - для повторной «кладки».

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

Способов внутристраничной борьбы придумано немало, по большей части они уже все известны и помогают от совсем уж примитивных программ. Но в нашем деле лишними меры быть не могут, так что сначала вкратце пройдемся по «обязательному минимуму».

Ограничение по частоте сообщений.
Самый простой инструмент. Необходимо следить, чтобы с одного и того же IP не было по десятку сообщений в минуту - ясно, что вряд ли человек с такой частотой будет высказывать какие-то умные мысли. Этот прием, конечно, толком не избавляет от спама, но сокращает его поток. Главное тут - правильно подобрать интервал: и большой плохо, и короткий нехорошо. По собственному опыту минуты три - в самый раз.

Блокирование сообщений по ключевым словам.
Тоже довольно простой фильтр: не пропускаются до публикации сообщения, имеющие среди текста слова, которых точно не будет содержать «добропорядочный» текст. Заодно можно отфильтровывать не только рекламу, но и мат.

Замена символов «двойниками».
Случайная замена на странице букв на схожие по написанию символы (для человека все равно, а для разбора и поиска по шаблону - помеха). При этом в ссылках, ведущих на добавление комментариев или на регистрацию, буквы меняются на схожие по написанию, но имеющие другой код. Например, русские «а», «о», «р» на английские «a», «o» и «p» соответственно. Это немного усложняет поиск потенциальных сайтов-жертв.

Изменение имен полей ввода.
Многие программы ищут в странице поля ввода со стандартными именами: «name», «user», «nick», «email», «mail» и так далее. Чтобы доставить программе некоторое неудобство, лучше называть поля как-нибудь нестандартно. Например, «kndfjero».

Замена надписей картинками с текстом.
Если реализован предыдущий шаг, то есть шанс, что программа не сдастся, не найдя привычных имен полей, а попытается проанализировать находящиеся рядом надписи, пытаясь выяснить, к чему какое поле относится. Смена поясняющих надписей на картинки с текстом сильно усложняет эту задачу в плане решения на программном уровне, а уж пиктограммы и вовсе делают ее практически невыполнимой. Визуально, с точки зрения пользователя, на странице ничего не меняется: какая ему разница, как набран текст на сайте, картинкой или текстом? С другой стороны, достаточно спамеру-человеку один раз посетить такую страницу и «врукопашную» посмотреть что где - и все, программе уже задан шаблон для этой страницы, она «знает», куда что писать и куда нажимать для отправки.

Встраивание «полей-приманок».
Раз программа ищет поля «name», «message» и тому подобные, почему бы не «обрадовать» ее этими полями? Это сделать довольно просто, например так:
Имя:
<input type=text name=name style="visibility: hidden; width: 1px;" value="">
<input type=text name=nlconpiqo value="">

E-mail:
<input type=text name=email style="visibility: hidden; width: 1px;" value="">
<input type=text name=ummsklcqu value="">
При отображении такие поля не видны, а программа их находит и обрабатывает. От особенно «умных« программ «visibility: hidden» прячется в CSS:
<style type="text/css">
input.foul {
visibility: hidden;
width: 1px;
height: 1px;
}
</style>

...

Имя:
<input type=text name=name class=foul value="">
<input type=text name=nlconpiqo value="">

E-mail:
<input type=text name=email class=foul value="">
<input type=text name=ummsklcqu value="">

Построение формы с помощью JavaScript.
Этот метод делает анализ формы еще более сложным: программе необходимо найти и выполнить код JavaScript, чтобы получить форму, которую следует заполнить:
<div id=mform> Включите, пожалуйста, поддержку JavaScript в браузере </div>

...

<script language=javascript>
myform=document.getElementById("mform");
mystr="<form method=\"post\" name=\"som";
mystr=mystr+"eform\" action=\"somescript.php\">И";
mystr=mystr+"мя: <input type=text name=ni";
mystr=mystr+"ck value=\"\"><br>E-ma";
mystr=mystr+"il: <input type=text name=ema";
mystr=mystr+"il value=\"\"><br>Сообщение: <texta";
mystr=mystr+"rea cols=35 rows=8 name=ms";
mystr=mystr+"g></textarea><br><input type=bu";
mystr=mystr+"tton value=\"отправить\" onclick=\"somef";
mystr=mystr+"orm.submit()\"><br></form>";
myform.innerHTML=mystr;
</script>
Наличие механизмов обучения и делает автоспамеров особенно «въедливыми»: один раз программе показали, как надо действовать при данной ситуации, она запомнила, и все - разгребай, хозяин, спам на форуме. Значит, надо сделать так, чтобы страница каждый раз была разной, верно?

Отлично, тогда переходим к следующим, более изощренным методам.

Генерирование случайных имен полей ввода.
Это просто усовершенствованный метод изменения имен полей ввода: имена изменяются не один раз (при написании скрипта), а при каждом вызове страницы. Тут есть одна тонкость: поскольку имена раздаются динамически, надо как-то известить получающий данные скрипт, какая переменная за что отвечает. Например, ввести дополнительное скрытое поле, в которое записать шифровку, в которой указать, какие поля обрабатываются:
<form method="post" name="jdfjvb" action="somescript.php">
Имя: <input type=text name=nlconpiqo value="">
E-mail: <input type=text name=ummsklcqu value="">
Сообщение: <textarea cols=35 rows=8 name=thtqnrnee></textarea>
<input type=button value="отправить" onclick="jdfjvb.submit()">
<input type=hidden name=temp value="piqonlconbnhrshelcquummskrneethtqn">
</form>
В somescript.php происходит «разбор» переменной-шифровки temp с именами и выуживание из переданных данных нужной информации:
$war = decrypt_string($temp);
$name = trim($_POST[$war[0]]);
$email = trim($_POST[$war[1]]);
$message = trim($_POST[$war[2]]);
Функция decrypt_string отвечает за расшифровку переданных данных и не ограничена ничем, кроме вашей фантазии. Алгоритм шифрования можно в любой момент изменить, например, если спамер просто использует единожды загруженную страницу для отправки повторных сообщений.

Генерирование принимающего скрипта.
Усложняем предыдущий случай: кроме случайных имен будем создавать на диске и принимающий скрипт:
<form method="post" name="jdfjvb" action="shebnhr.php">
Имя: <input type=text name=nlconpiqo value="">
E-mail: <input type=text name=ummsklcqu value="">
Сообщение: <textarea cols=35 rows=8 name=thtqnrnee></textarea>
<input type=button value="отправить" onclick="jdfjvb.submit()">
<input type=hidden name=temp value="piqonlconbnhrshelcquummskrneethtqn">
</form>
На диске, соответственно, создается shebnhr.php - на этот раз введенные данные отправятся на обработку этому файлу. Таким образом, можно иногда менять поля «Имя», «E-mail» и «Сообщение» местами, (что нанесет ущерб удобству пользователя не в пример меньше, чем корявые буквы на рисунке, но окончательно собьет с толку программу), менять механизм шифрования «на лету» - ведь принимающая часть генерируется специально под данные имена полей, под данную форму. Переданная запись сохраняется в гостевой, а после принимающий скрипт стирает сам себя. Соответственно, использовать для отправки данных вторично невозможно чисто физически: файла, к которому обращались в первый раз, давно нет. Конечно, не знаю, насколько оправдано применение решения для сайта в 3000 уникальных посетителей и 600-700 сообщений в день, ибо получается нагрузка на жесткий диск из-за создания и стирания файлов.

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

Увы, против спамеров, вбивающих обявления вручную, противоядий вовсе нет (кроме, разве что, фильтрования сообщений по содержимому). С другой стороны, целью этой статьи не было выведение универсального оружия против спама. Целью было показать, что тест Тьюринга - не панацея, а иногда - только причина раздражения. И что в большинстве случаев можно запросто обойтись без него, не заставляя пользователя делать лишние операции. Достаточно только хотя бы немного изменить, придать индивидуальности файлам - из-за одного-единственного сайта переделывать ориентированную на типовые решения и распространенные CMS спам-программу никто не будет.


Опубликовано на HostInfo.ru.


комментарии: 0 RSS HTML рубрики: приемчикиjuick twitter facebook вконтакте
Дуэт

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

Дуэтом расправим четыре крыла,
Руками коснемся друг друга лица.
Мы мягко скользим среди тысячи лиц,
Что богам неведомым падают ниц.

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


© V.exeR


комментарии: 6 RSS HTML рубрики: стихиjuick twitter facebook вконтакте
За кулисами.

Конечно, в жизни даже очень серьезных КБ и стратегических заводов бывают и курьезные случаи, и побочные продукты. Что уж говорить о моей мастерской, состоящей (чаще всего) из одного человека, дурных идей и дури их воплотить в жизнь в котором хватит на пятерых?.. Вот о них и буду писать.


комментарии: 2 RSS HTML рубрики: жизненноеjuick twitter facebook вконтакте
Агентство «Хочу домой»

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



комментарии: 1 RSS HTML рубрики: допридуманоjuick twitter facebook вконтакте
Играем в лотереи

Оказывается, есть у меня аккаунт на i-loto.ru. Я об этом не так давно вспомнил, да решил прикупить пару лотерейных билетов. Ну чисто так, ради профилактики. Сегодня открываю историю игр и вижу такую картину:



Если учесть, что каждый билет стоит по 50р... По-моему, это совершенно непрозрачный намек: «парень, не мучай Фортуну, не нужны тебе деньги».


комментарии: 2 RSS HTML рубрики: жизненноеjuick twitter facebook вконтакте
Болт.

Игра S.T.A.L.K.E.R. еще задолго до своего выхода породила целый сонм шуток, анекдотов, слухов, домыслов и прочей околопредметной атрибутики. Самой, пожалуй, популярной шуткой было переименование С.Т.А.Л.К.Е.Ра в Ж.Д.А.Л.К.Е.Ра. Когда же игра все-таки вышла, многие остались ей недовольны, но в одном сходятся почти все (особенно геймеры старой закалки, видавшие X-COM и DooM): игрушка вышла атмосферной. Наслушавшись рассказов, я (не без помощи друзей) нашел ящик ржавых болтов. Болт - предмет сам по себе культовый - с выходом этой игры стал еще культовее. Чем я и воспользовался: сфотографировал один из болтов и оформил это в рекламу.



комментарии: 0 RSS HTML рубрики: допридуманоjuick twitter facebook вконтакте
Минута молчания.

Сегодня примерно в 8 часов утра скончалась мысль. Нет, не так. Мысль!. Она пришла ко мне в голову внезапно, будто спасаясь от кого-то, а я нечаянно оказался на ее пути. Она была яркой, оригинальной, свежей и очень, очень красивой. Мне немедленно захотелось поделиться ею со всеми, показать друзьям и не совсем друзьям («смотрите, что я нашел!»), выслушать сдержанные завистливые реплики «ничего так...», восторженные «ух ты!», понимающие «ага, у меня похожая была как-то»... Но под рукой не оказалось ничего, на чем можно было бы зафиксировать изящность образа. Ни-че-го. Я попытался запомнить ее, я твердил формулировку снова и снова, путая от волнения слова. Не помогло. В результате... В результате на месте волнующе красивой мысли вы читаете этот некролог. Помянем минутой молчания все мысли, что не добрались до страниц дневников из-за склероза своих хозяев.

Носите с собой ручку и блокнот. Пригодятся. «Тупой карандаш лучше острой памяти».


комментарии: 2 RSS HTML рубрики: жизненноеjuick twitter facebook вконтакте
E-Money 2007

Разрекламировать можно любую чушь. И сделать это почти без вранья, захлебываясь от восторга, описывая продукт. Посмотрим, как можно преподнести обычный бумажник, запиханный в mobile rack.



комментарии: 0 RSS HTML рубрики: допридуманоjuick twitter facebook вконтакте
ICQ

Перестал работать на логин login.glogin.messaging.aol.com. Ping вообще не проходит, говорят нет больше такого доменного имени. Интересно, это насовсем или временные глюки?


комментарии: 0 RSS HTML рубрики: жизненноеjuick twitter facebook вконтакте
страница: 1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
Подписаться


Рубрики:

жизненное
аудио-я
видеомонтаж
фотоохота
ремонт
стихи
рассказы
синематограф
библиотека
фонотека
точка зрения
FAQ
приемчики
придумалось
ожидания-прогнозы
допридумано
рингтоны
это я так шучу
обои
микрозарисовки
опасный Интернет
я в печати
поездки-тусовки
смехоспам
мой код
футболки
игродром
подводная жизнь
сайтоводство
программы
персоны
LI.ru
аватарки
курсоры


Разное:

Полка с фильмами
Книжная полка
Полка с играми
Избранное


Календарь записей

2024 (1)
2021 (1)
2020 (7)
2019 (3)
2018 (1)
2017 (10)
2016 (12)
2015 (3)
2014 (12)
2013 (10)
2012 (17)
2011 (84)
2010 (172)
2009 (228)
2008 (263)
2007 (154)
декабрь (23)
ноябрь (22)
октябрь (26)
сентябрь (22)
август (22)
июль (16)
июнь (20)
март (2)
январь (1)
2006 (4)
2005 (1)
2004 (1)
2002 (1)
2001 (9)
2000 (9)
1999 (1)
© сайт разработан и поддерживается мной.