Евгений Степанищев

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

[Без заголовка]

На иллюстрации - Pimpin Aint Easy Watch. Часы с 72 светодиодами. размеры 30x55x10 мм, водонепроницаемые, выдерживают до 3 атмосфер. Стоят 17800 йен или 155 долларов США. Производит их компания Tokyo Flash.

Pimpin Aint Easy Watch (13.72КБ)

Принцип отображения примерно понятен из картинки, подробнее, думаю разбирать смысла не имеет - подход ясен, интерфейс проигрывает дизайну. Захотите приобрести - придётся привыкать.
Комментировать
29 октября 2004 20:00

[Без заголовка]

Обновился 8sender (PHP) - программа, позволяющая отправлять на e-mail файлы в формате "BOLK quoted printable" (это наиболее экономичный формат пересылки файлов по почте). Программа писалась с единственной целью - экономить трафик и время адресата.

Новое в этой версии:

Напоминаю, что для того, чтобы использовать эту программу, вам нужен интерпретатор языка PHP (минимально - файлы php.exe и php4ts.dll).

Для удобства тех, кто работает под Windows я сделал специальный файл - 8sender.bat. Скачивать и запускать нужно его, в пределах видимости скрипта должен быть расположен файл php.exe - той же папке или в любой папке, указанной в системной переменной PATH.

Плохие новости владельцев Windows 95/98/ME - вам придётся указать SMTP сервер для отправки сообщений. Инструкцию по запуску можно получить, запустив программу без параметров.
Комментировать
29 октября 2004 20:00

[Без заголовка]

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

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

Наученный горьким опытом даю совет: если вам кажется, что "зачем это нужно, если есть phpinfo", то перечитайте текст выше - там как раз об этом.
Комментировать
29 октября 2004 20:00

[Без заголовка]

Тест: слышите ли вы примерно на 10-й секунде тему гармошки из песни "Чёрный бумер" в файле Bahet.mid? Мне кажется, что слышится очень отчётливо, с некоторыми поправками, конечно.
Комментировать
29 октября 2004 20:00

[Без заголовка]

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

Традиционно, разработчики либо мирятся с неизбежным злом, либо используют так называемый CAPTCHA-метод - пользователю выводится (часто зашумлённая) картинка с кодом или кодовым словом, пользователь должен ввести то, что он видит на картинке в специальное поле.

CAPTCHA-метод плох вот чем. Относительно простые изображения легко распознаются. Я, в качестве эксперимента, писал простой OCR для Chat.Ru и, посложнее, для SMS-сервиса Beeline.Ru (вероятность правильного распознования - 90%).

Если сильно исказить картинку, пользователь может не понять (со мной такое бывало), что на ней, собственно, изображено и после первой же неудачно попытки ввода уйти - робота же это не смутит. Если, скажем, вероятность распознавания составить всего лишь 20%, ничего не мешает роботу сделать несколько попыток до успеха.

Второй недостаток... Недавнее изобретение спамеров - метод "леммингов". Спамер открывает порносайт и... предлагает всем желающим войти, в качестве "платы", ввести код, написанный на картинке. Картинка берётся с сайта "жертвы". Как только "лемминг" вводит код, спам-робот использует его для регистрации или спама в нужном ему форуме.

Разновидность этого CAPTCHA-метода - просто писать слово с опечаткой или пропущенной буквой с просьбой ввести правильный вариант. Решение простое, но, когда я подумал над проблемой обхода такой защиты, решение этой проблемы пришло мне в голову менее чем за 15 минут. Многие сервисы поисковика "Яндекс" (например, Lingvo) предлагают варианты замены неверно написанного слова. Дело техники - "скормить" Яндексу слова с ошибкой и получить верное написание.

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

Образы. Иллюстрация (3.45КБ)

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



Figlet.

История FIGlet началась весной 1991 года. Frank Sheeran написал другу автора первой версии Ian Chai письмо, где в качестве подписи использовалась строка, написанная ASCII-графикой. После чего Glenn Chappell, автор первой версии FIGlet, написал на C небольшуй программу, позволяющую писать придуманным им шрифтом любые строчки. FIGlet так и расшифровывается "Frank, Ian and Glen's letters" ("письма Френка, Иана и Глена).

С тех пор появилось несколько версий подобных программ, библиотеки на различных языках, я сам, относительно недавно, написал библиотеку Text_Figlet для PHP (скоро войдёт в PEAR). В данный момент доступно примерно 420 шрифтов для написания.

Шрифт в изображении можно уменьшить, например, до 4 пикселей и фраза на экране будет занимать вполне приемлемое пространство. Жизнь спамера осложняется не только тем, что количество шрифтов довольно велико, но и эффектом "smushing" (горизонтальная склейка), который используется в некоторых шрифтах. Посмотрите внимательно на написанную фразу - соседние буквы в ней "склеены".

В начале было слово...

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

Некоторые сервисы (LiveJournal), например, используют альтернативный CAPTCHA-метод - проговаривание фразы синтезированным голосом. В синтезе голоса давно нет ничего удивительного, но есть свои недостатки - синтез голоса более ресурсоёмкая операция, фраза с трудом распознаётся не носителями языка, да и звуковые платы есть не у всех. Пока метод можно рекомендовать к использованию разве что в качестве альтернативы.

Активный контент.

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

Разобраться в том, как это приложение работает, чтобы понять что оно выводит роботу не по силам. В принципе, можно было бы давать Java-машине или Flash-плагину отобразить изображение, снять с него скриншот и распознать его, но стоимость такого взлома, как мне кажется, непомерно высока.

Animated GIF.

Несколько более простая разновидность предыдущего метода не требующая отдельного плагина - Animated GIF. Если бы вы смогли разыскать где-нибудь 13-й параграф из "Ководства" Лебедева (на сайте его нет), то вы бы смогли прочитать следующее:

Хитрость заключается в том, что GIF позволяет создавать анимации, где каждый кадр может иметь свою локальную палитру. Предел палитры в GIFе, как мы знаем - 256 цветов. Но никто не говорил, что нельзя записать 10 кадров, в каждом из которых было бы по максимуму цветов и которые были бы все одновременно видны. В результате мы получим 2560 цветов. Неплохо для начала.


True Color GIF (180.24КБ)

Подобная идея приходила в голову не одному только Лебедеву, конечно. Картинка - одна из иллюстраций из статьи True Color GIF, где в формате GIF используются 32796 цветов. Заливка, которую вы видите, нужна лишь для демонстрации - в "Ководстве" Лебедева GIF, содержащий 1792 цвета отображался без заливки, сразу целиком.

Пора, наверное, уже сказать к чему я клоню, если вы ещё сами не догадались. Разбор GIF'a, скомпонованного подобным образом - задача довольно сложная. Писать можно полноцветными буквами, части которых находятся в разных кадрах, играя с их перекрытием (например, заслонять символы или их части).

Безусловно, задача решаемая - нужно только последовательно разобрать все кадры и наложить их один на другой, но для этого нужно уметь работать с animated GIF, да и правильно наложить один кадр на другой - в общем, тут есть где споткнуться спамеру.
Комментировать
28 октября 2004 20:00

[Без заголовка]

Случайно нашёл на сайте Яндекс документ "Как писать слово ВЫ":

Таким образом, местоимения Вы, Ваш пишутся с прописной буквы при обращении к одному лицу в текстах следующих жанров:

(а) личное письмо (адресат - конкретное лицо; факультативное написание - выбор определяет сам пишущий, выражая/ не выражая вежливое или уважительное отношение к адресату);

(б) официальные документы (адресат - конкретное лицо, отношение пишущего к адресату не имеет значения);

(в) анкеты (адресат - неконкретное лицо; отношение пишущего к адресату не имеет значения).

Еще раз напомним, что при обращении к нескольким лицам местоимения вы, ваш пишутся со строчной буквы (см. выше).

...

Поскольку большинство текстов Интернета не соответствуют условиям (а), (б), (в) написания Вы с прописной буквы (сообщения электронной почты не являются личными письмами в традиционном смысле слова), можно рекомендовать написание вы, ваш при обращении к читателям/ посетителям страницы в Интернете со строчной буквы.
Комментировать
27 октября 2004 20:00

[Без заголовка]

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

В частности, была разработана система кеширования, которую можно охарактерировать как "всё по максимуму в в HTML, остальное - включаем через SSI и фреймы". Поскольку на сайте используются пользовательские сессии, сложилась ситуация, когда сессию должны могли инициировать и скрипты (язык программирования - PHP, основной сервер - Apache 1.x), включенные через SSI. Тут надо заметить, что из-за жёсткого требования заказчика - в строке запроса не должны присутствовать PHPSID и т.п (на сайте используются ЧПУ), использование trans_sid исключалось.

Trans_sid использовать нельзя, скрипты, включенные через SSI заголовок выдать не могут и, следовательно, проставить сессию в cookie - тоже. Сначала я, было, решил полностью отказаться от SSI и работать исключительно с iframe, но подумал - нельзя ли Apache заставить генерировать идентификатор сессии самостоятельно?

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

This module provides a magic token for each request which is guaranteed to be unique across "all" requests under very specific conditions. The unique identifier is even unique across multiple machines in a properly configured cluster of machines.


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

Проведя испытания, я столкнулся с вполне ожидаемыми трудностями - во время первого запроса, когда сервер только что отослал cookie клиенту, в переменной PHP \_COOKIE$ пусто - cookie ещё не пришли от клиента назад и, соотвественно, не были записаны в эту переменную.

В PHP есть функция apache_response_headers, возвращающая массив всех заголовков, выдаваемых в HTTP-запросе в данный момент. Естественно, в числе этих заголовков нашёлся и тот, что отвечает за простановку cookie. Функция, читающая такой заголовок и cookie, может выглядеть, например, так:
function U_sid()
{
	// Если идентификатор уже есть в cookie, возвращаем его
    if (isset($_COOKIE['Apache'])) return $_COOKIE['Apache'];

    // Иначе - ищем его в ответе Apache
    $responce = apache_response_headers();
    foreach (preg_split('/s*;s*/', @$responce['Set-Cookie']) as $chunk)
    {
        list($key, $value) = explode('=', $chunk, 2);
        if ($key == 'Apache') return $value;
    }

    return null;
}
"Apache" - это имя cookie, которое проставляет Apache. Далее - всё просто, в php.ini отключаем "session.use_trans_sid" и "session.use_cookies", чтобы запретить PHP создавать сессии, в .htaccess помещаем директивы модуля mod_usertrack:

CookieFormat Compact
CookieTracking on
CookieStyle Cookie

А в библиотечный файл (или наши файлы PHP, поближе к началу), вызов необходимых, для создания сессии, функций:
// Узнаём идентификатор сессии
if (($sid = U_sid()) !== null)
{
    // Если он не null, создаём сессию
    session_id($sid);
    session_start();
}
В итоге мы получаем cookie-сессию, которая создаётся даже в файле, включенном через SSI.
Комментировать
27 октября 2004 20:00

[Без заголовка]

Тем временем, съёмки фильма "Волкодав" идут полным ходом.

Кадр из фильма "Волкодав" (23.37КБ)

Очень интересно как получатся боевые сцены, коих в фильме должно быть великое множество. Будет ли это что-то достойное или снимут как обычно.
Комментировать
27 октября 2004 20:00

[Без заголовка]

В журнале kukutz'a на сайте NPJ появилась заметка "Решение проблемы box-model" - перевод "Box model tweaking":

Известно, что есть как минимум два варианта бокс-модели:

W3Cшный, когда в ширину блока включен только размер содержимого (контента), майкрософтовский, когда в ширину блока включается ещё padding и border.

Майкрософтовский, надо сказать, куда более понятен и интуитивен.

Сегодня мы рассмотрим, как, проиграв в валидируемости ваших CSS, попросить все браузеры придерживаться Майкрософтовской бокс-модели.
Комментировать
27 октября 2004 19:00

[Без заголовка]

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


Я и не подозревал. Честно говоря, берут меня сомнения - могли ли товарищи из группы "Технология" вообще что-то знать тогда об офшоре и индусах.
Комментировать
25 октября 2004 20:00

[Без заголовка]

Пресловутое "rm -rf /" уже банально. Как приевшийся анекдот. Тем, кто этот анекдот не знает, расскажу - эта команда в Unix/Linux/freeBSD/MacOS удаляет все файлы и папки. Пора выдумать что-то новое. Например:

find / -type f -exec dd if=/dev/urandom count=200 bs=1 of={} 2>/dev/null ;


Эта команда ищет все файлы, начиная от корня и затирает их случайными данными в размере 200 байт. Желающие могут расширить команду - дописать её так, чтобы байт было не 200, а случайное число.
Комментировать
25 октября 2004 20:00

[Без заголовка]

Уважаемые казанцы, знаете ли вы, что Казань - это не только столица республики Татарстан, но и маленький город в Слободском районе Кировской области.

Казань, Кировская область, Слободский район (10.98КБ)
Комментировать
25 октября 2004 20:00

[Без заголовка]

Меня поправляют. Спасибо Ильгизу Ахмадуллину:

Найдя чужую вещь,необходимо заявить о находке в милицию или в орган местного самоуправления (ст. 227 Гражданского кодекса РФ). Если в течение шести месяцев со дня заявления о находке лицо, управомоченное получить найденную вещь, не будет установлено или не заявит о себе в органы милиции, местного самоуправления, - нашедший вещь приобретает на нее собственность (согласно ст. 228 Гражданского кодекса РФ). В то же время лицо, нашедшее вещь, вправе потребовать от собственника вознаграждения. Согласно ст. 229 ГК РФ размер вознаграждения за находку может составлять до двадцати процентов стоимости вещи. Ссылка - $http://www.chassuda.ru/arhive1.php?y=2004&m=10&d=20¶m=5 http://www.chassuda.ru/arhive1.php?y=2004&m=10&d=20¶m=5$


Что называется - я слышал звон, да не знаю где он. Что примечательно - впервые узнал я о положении с находками именно из программы "Час суда". Видимо, невнимательно слушал судью или неверно понял.
Комментировать
25 октября 2004 20:00

[Без заголовка]

Открылся Wiki по SQLite. Цитата:

В Web sqlite уготовано место исключительно блогов и прочего где минимально количество записей.

sqlite превосходен, когда большое количество запросов, и когда операции записи редки, и редко задействуют несколько таблиц. При более-менее сложных операциях плохо, ибо блокировку отдельных строк он не умеет, и во время транзакции блокирует базу целиком (даже не отдельную таблицу).
Комментировать
22 октября 2004 20:00

[Без заголовка]

Romanson RM9188L (3.56КБ) Юля давно хотела, чтобы я подарил ей часы. Но, будучи как многие люди суеверной, одновременно предостерегала меня от этого - примета плохая. Судьба, видя наши метания, поступила очень забавно - как-то я нашёл женские часы. Хороши, швейцарские, позолоченные. Romanson RM9188L.

Как того требует закон, мы дали объявление в пару газет, подождали немного и, раз никто не отозвался, я отдал эти часы Юле. В милицию их нести глупо - заявили бы вы о такой пропаже? В общем, вроде и подарок, вроде и нет. Я просто отдал Юле чужие часы, хозяин которых не объявился.

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