Feb 27

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

Суть задуманного в том, чтобы отдать пользователю интерфейс по управлению внешним видом капча защиты прямо на сайте, чтобы он сам не понимая ничего в програмировании менял все что угодно:

  • список шрифтов
  • эффекты символов
  • эффекты всей строки символов
  • фон
  • эффекты фона

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

Читать далее »

Теги: ,

Jun 25

Насколько php устойчив к обработке больших объемов данных, убедился за последние 2 недели. Имели место быть 2 случая.

Читать далее »

Теги: , ,

Jun 05

Автор twitter-tools функционалом своего плагина тискал свои ссылки в каждый мой кроспост из блога. Я конечно понимаю что он потратил время на написание плагина, но он на своей странице держит кнопочку поддержите проект денюжкой и еще такие непотребства со ссылками.

Читать далее »

Теги: , , ,

Nov 08

FireFox - пожалуй единственный браузер, который достаточно хорошо оснащён инструментами нужными веб. разработчику. Конечно эти дополнения нужно скачивать/устанавливать, а ещё нужно знать названия этих дополнений, чтобы их быстро найти и инсталлировать в FireFox.

FireFTP - очень удобный ftp клиент, в последнее время стал достаточно продвинутым и с ещё более понятным пользовательским интерфейсом.

IE Tab - достаточно удивительный инструмент, с его помощью вы можете легко увидеть как ваша страница будет выглядеть в Интернет Эксплорере, все это в один клик.

Firebug - с помощью данного дополнения вы можете редактировать, отлаживать и мониторить CSS, HTML и JavaScript на любой странице.

FirePHP - firebug дополнение для Ajax разработки

The Web Developer - самое главное дополнение, которое должен иметь на вооружении веб. разработчик, добавляет выпадаюшее меню и панель в браузер с различными инструментами для веб. разработки. Когда я первый раз установил данный компонент и увидел что в нем можно в View Source - View Generated Source вобщем увидеть не исходный HTML код, а уже измененный (через JavaScript или Ajax) а тогда я уже начинал использовать Ajax в своих проектах, сказать что я просто обрадовался ничего ни сказать, только произнес вслух НАКОНЕЦТО.

HTML Validator - понятно из названия, что это html валидатор, их кстати очень много среди дополнений к FireFox.

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

CSS Validator - дополнение проверяющее валидность CSS на текущей странице.

Venkman - кодовое имя для Mozilla’s JavaScript Debugger

iWEBTOOL - доступ к более чем 30 инструментам веб. разработчика прямо в вашем браузере

LinkChecker - из названия понятно, что дополнение предназначено для проверки сайтов на наличие неработающих ссылок

Load Time Analyzer - позволяет разработчику измерять и изображать графически скорость загрузки страниц в FireFox

Page validator - очередной валидатор W3C.

The Total Validator - валидатор

Modify Headers - позволяет пользователю добавлять изменять и фильтровать заголовки HTTP запросов.

The XPather - инспектор DOM.

LiveHTTPHeaders - показывает HTTP заголовки страниц в реальном времени.

Теги: ,

Oct 07

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

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

Перехожу  к делу, короче говоря если хотите чтобы вас не спамили нужно делать свою уникальную каптчу. Если не можете сами программировать, наймите кого нибудь, думаю что цена в 50$ не такая высокая.

Как должна работать каптча

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

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

Правильно делать так, строка на картинке = str1 и строка в куках = str2, генерятся случайным образом независимо друг от друга. STR2 нужна для того чтобы передавать ее в форму в открытом виде. STR1 написана только на картинке каптча.  Обе строки связаны между собой в таблице. Т.е. человек в скрытом поле формы(или куках) имеет STR2, STR1 введет с картинки, и когда форма отправится скрипту скрипт достанет из таблицы запись по STR2 и сравнит STR1 из таблицы и строку введенную пользователем.

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

Делаем генератор картинок

Первое, что нужно сделать, это найти уникальный шрифт. Взял с полки диск с 1 000 000 шрифтов и вперед. Решил выбирать только из рукописных шрифтов, набралось около 20 штук.

Еще насчет шрифтов, можно использовать рандомом все 20 шрифтов, например каждый раз писать случайным фонтом все буквы. Можно каждый символ на картике писать случайно выбранным шрифтом. Я для себя решил писать всегда одним и тем же шрифтом, если начнется спаминг, просто сменю шрифт на следующий.

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

Исходный код

<?php
// Тип содержимого – картинка формата PNG 
header("Content-type: image/png");
 
// создаем картинку размером 130X40
$img=imagecreatetruecolor(180, 80) or die('Cannot create image');
 
// заполняем фон картинки белым цветом
imagefill($img, 0, 0, 0xFFFFFF);
 
$x=0;
$i = 1;
$sum = "";
$fonts = array(
'./BIRCH_C.TTF', 
 './CHAMPGNE.TTF', 
'./EASTSIDE.TTF', 
'./GISMONDA.TTF', 
'./OLGA_C.TTF', 
'./RIVERSDE.TTF', 
'./SSR56__C.TTF', 
'./STAC222N.TTF', 
'./STEVE.TTF', 
'./VICTORIA.TTF'
);
 
 
//$font = $fonts[rand(0, sizeof($fonts)-1)];
$font = './OLGA_C.TTF';
 
// выводим одну цифру за один проход цикла (всего 5 цифр)
while ($i++ <= 5)
{
   // выводим текст поверх картинки
   imagettftext(
   $img,          // идентификатор ресурса
   rand(12,25),   // размер шрифта в пикселях
   rand(-35,35),  // угол поворота текста
   $x=$x+30, 25+rand(0,10), // координаты (x,y), соответствующие левому нижнему
                            // углу первого символа
   imagecolorallocate($img, rand(0,128), rand(0,128), rand(0,128)), // цвет шрифта
   $font, // имя файла со шрифтом
   $rnd=rand(0,9)); // случайная цифра от 0 до 9
   // Собираем в одну строку все символы на картинке
   $sum = $sum.(string)$rnd;
}
 
//Не забудьте $sum записать в таблицу как STR1
 
// выводим готовую картинку в формате PNG
imagepng($img);
// освобождаем память, выделенную для картинки
imagedestroy($img);
?>

Вот, что получилось

Моя каптча

Вся работа заняла не более 30 минут.

Теги: , , ,

Sep 18

Ездил на неделю в Санкт-Петербург, на курсы по JavaScript (проводил www.avalon.ru), купил там 4 книги

JavaScript Народные советы
Люблю книжки по программированию, которые разбирают проблемы (начал читать)
Информационная архитектура в интернете
Редкое сочетание для книги по IT: легкого стиля изложения и высокой смысловой ценности
Оптимизация и продвижение сайтов в поисковых системах
Год назад читал pdf файлы докладов с конференции господина Ашманова, недавно в читалке Sony Reader прочитал книгу Ашманова (записки-воспоминания о работе Ашманова в rambler.ru) “Жизнь внутри пузыря”, вобщем тема купленой книги и автор достаточно интересны
CMS Drupal руководство по разработке системы управления сайтом
Давно мечтал купить такую книгу, подробный разбор концепций + листинги состоявшейся CMS

Теги: , , , , , ,

Sep 04

Последнее время в основном работал в сотрудничестве в NMAN-ом над созданием распознавалок каптч.

Пора подвести итоги. Привожу примеры “сделанных” каптч.

Форумный движок PHPbb 2 - хотя выпущена 3 версия все еще достаточно сильно распространен
Очень простая каптча, распознавание 100%
Очень простая каптча, распознавание 100%
выхлоп примерно 75% удачных распознаваний
выхлоп 100% удачных распознаваний
выхлоп примерно 80% удачных распознаваний
выхлоп примерно 75% удачных распознаваний
выхлоп примерно 99% удачных распознаваний
выхлоп 100% удачных распознаваний
выхлоп 100% удачных распознаваний
выхлоп примерно 75% удачных распознаваний
выхлоп примерно 95% удачных распознаваний
выхлоп 100% удачных распознаваний
выхлоп примерно 75% удачных распознаваний
выхлоп примерно 85% удачных распознаваний
выхлоп 100% удачных распознаваний
выхлоп примерно 85% удачных распознаваний
выхлоп примерно 99% удачных распознаваний

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

Теги: , , ,

Jun 17

Буквально 3 дня назад имел счастье поразбираться (полазить по кодам) - такое случается редко, и после подобных разборок довольно хорошо поднимается экспириенс. А что еще нужно программисту кроме регулярного поднятия уровня опытности!?

Описание диспозиции

Есть форма, в этой форме есть поле для ввода даты/времени, для удобства ввода прикручена к этому полю JavaScript библиотека JSCalendar (симпотичный и удобный выпадающий календарик)

По сабмиту дата/время вставляется в таблицу в виде UnixTime, для конвертации в формат UnixTime использую следующую функцию

function format_to_unixtime($t)
{
   list($date, $time) = split(' ', $t);list($day, $mon, $year) = split("/", $date);
   list($hour, $min) = split(':', $time);    return mktime($hour, $min, 0, $mon, $day, $year);
}

Для работы с базой данных MySQL использую библиотеку Дмитрия Котерова DBSimple.

Проблема

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

Сложилось стойкое впечатление, что на каком-то этапе к дате плюсутся 6 часов из за смещения по гринвичу.

Следующий тестовый пример показал что дело в функции mysql FROM_UNIXTIME

<?php
include_once('conf.php');
include_once('lib/dbsimple/mysql.php');
//Подключаемся в MySQL
$db = DbSimple_Generic::connect("mysql://".$mysql_user.":".$mysql_passwd."@".$mysql_host."/".$mysql_db);
// Устанавливаем обработчик ошибок MySQL.
$db->setErrorHandler('databaseErrorHandler');
$db->setIdentPrefix($mysql_table_prefix);
 
$dt = '18/06/2008 10:10';
 
$db->query("insert into test (dt) values (?)", format_to_unixtime($dt));
 
echo $dt."<br>";
echo format_to_unixtime($dt)."<br>";
 
$recs = $db->select("select id, dt, FROM_UNIXTIME(dt, '%d/%m/%Y  %H:%i') ddt from test");
print_r($recs);
 
function format_to_unixtime($t)
{
list($date, $time) = split(' ', $t);
list($day, $mon, $year) = split("/", $date);
list($hour, $min) = split(':', $time);</strong>
 
return mktime($hour, $min, 0, $mon, $day, $year);
}
?>

18/06/2008 10:10
1213783800
Array
(
[id] => 1
[dt] => 1213783800
[ddt] => 18/06/2008 16:10
)

А вот что написано на странице http://dev.mysql.com/doc/refman/6.0/en/date-and-time-functions.html

FROM_UNIXTIME() functions return values in the connection’s current time zone, which is available as the value of the time_zone system variable.

Вывод: читать документацию надо чаще.

Теги: , ,

Mar 18

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

Так вот насчет браузеров, вернее о сайте (PDA) оптимизированном  для карманного девайса сейчас и поведу речь. Хм. в принципе обычные сайты, почти нормально просматриваются в карманном устройстве, особенно после того как я установил опцию резать страничку на 3 полосы и показывать в 1 столбец, результатом этого стало то, что исчезла необходимость в горизонтальной прокрутке. Так вот отличия по пунктам, которые повысят комфорт.

1) Разрешение экрана у мобильных устройств гораздо меньше, чем у настольного монитора обычно 320 х 240

Из этого следует что …

- картинки должны быть по ширине не больше 240 px

- трехколоночная и даже двух колоночная верстка шаблона страницы не нужна. Долой табличную вестку!

- вестку на DIV -ах тоже долой

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

- а как же верстать? да очень просто: Текст, картинка(лучше кстати совсем без картинок, в крайнем случае логотип и все), ссылки - все это с использованием тегов: p, br, h1-h6, a, img, b, i. Никто не запрещает использовать стили и javascript, а оно надо?

2) Кстати насчет javascript, на PDA устройстве никогда не возникнет событие повешенное на наведение курсора на объект

- потому, что  курсора то нету, есть стилус который позиционируется не касаясь экрана, а прикосновение к экрану это уже onclick

 3) Еще насчет javascript, сдается мне не все js-коды  прекрасно работающие  на ПК будут работать на PDA

- где бы раздобыть список работающего хотя бы для пэдэашных IE и Opera?

- есть ведь еще много экзотических браузеров, которые вообще не поддерживают javascript

В последних строках поста отсылаю к статье на буржуйском языке

Make your site mobile friendly 

http://www.thinkvitamin.com/features/css/make-your-site-mobile-friendly

Теги: , , ,

Jan 29

На главной странице указанного в заголовке ресурса написано
Full Web Building Tutorials - All Free
что означает
Исчерпывающее обучение Веб. разработке - Все бесплатно
Создатели ресурса действительно постарались, разнообразие тем впечатляет …

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

Теги: , ,