Организация общения с посетителями сайта: варианты.

10 комментариев

Организация общения с посетителями сайтаДовольно интересная тема, особенно важная для интернет-магазинов, сайтов турагенств и прочих оператор-ориентированных сервисов. Стандартный подход в рунете такой: в шапке сайта указывается телефон, в подвале — е-мейл, в лучшем случае есть ICQ или форма обратной связи.

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

На западе решением этой проблемы было озадачено несколько компаний, разработавших всё, что можно найти в Google по запросу «Live Chat Software«, то есть программы для мгновенной связи оператора с посетителем сайта. По некоторым данным, такой механизм в хорошей реализации может увеличить конверсию и, соответственно, продажи более чем на 80% (!). Это вполне логично — задать вопрос специалисту проще, чем лазать по каталогу и легче, чем звонить, искать кого-то в ICQ или ждать ответа по e-mail.

Отсюда логически следует жизненный вопрос: как это реализовать, желательно самостоятельно и бесплатно?

Подход первый. Грамотный.
Будем писать сервис под себя. Самый удобный, открытый и подходящий для этой цели стандарт, на мой взгляд — Jabber Jabber. Берём class.jabber.php class.jabber.php или немного его доработанный вариант PHP Jabber Client PHP Jabber Client и пишем всё, что нам нужно. Для любителей Python: xmpppy xmpppy.

Не нравится XMPP — можно рискнуть и заморочиться с ICQ, например на основе PHP-класса WebIcqPro WebIcqPro или даже Java-библиотеки Joscar Joscar. Я думаю, что ICQ следует использовать только в том случае, когда нет возможности использовать Jabber, так как этот протокол не блещет стабильностью, надёжностью и предсказуемостью. Да и возможность несложного создания Jabber2ICQ гейта даёт Jabber`у дополнительное преимущество.

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

1. Hab.la Hab.la. Весьма удобный сервис, основанный на Jabber. Легко настраивается, не вызывает конфликтов, легко интегрируется в любую страницу, позволяет использовать любой jabber-клиент на стороне оператора. Подробнее про хаблу можно почитать у Дикого Hab.la.

2. Google Talk chatback badge Google Talk chatback badge. Просто и со вкусом, если грамотно оформить, то вполне приемлемо. Но найден недостаток в реализации — сделано с использованием Flash (Google, ЗАЧЕМ?), что ограничивает в общении неанглоязчных пользователей не-windows. Я надеюсь, в Google исправят этот косяк.

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

  • Веб Мессенджер Веб Мессенджер
  • SiteHelper.NET SiteHelper.NET
  • GoTalk GoTalk
  • LiveContact LiveContact

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

Спонсор статьи: продвижение сайтов от StarDesign. Без комментариев.

Жилинский Владимир.



Началась регистрация на СПИК-2008

15 комментариев

СПИК-2008Третья Санкт-Петербургская интернет-конференция «СПИК – 2008» состоится 6 июня 2008 года в отеле «Ольгино». Эта конференция, проводимая в рамках Северо-Западного этапа всероссийского Интернет-Марафона (РОЦИТ) посвящена развитию интернет-бизнеса в регионе и привлечению внимания компаний к современным сетевым возможносям.

Мои заметки о предыдущих конференциях:

На официальном сайте конференции СПИК-2008 открыта регистрация для бесплатного посещения. Быть всем :-)

Кстати, Антон Попов проводит второй опрос блогосферы для переиздания своей книги о блогах и очень просит всех принять в нём участие Опрос.

Жилинский Владимир.



PHP: фильтр от XSS и SQL-инъекций.

49 комментариев

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

В PHP есть ряд специальных функций для работы со строками, применимых для этой цели. Вот они:

strip_tags() — вырезает теги HTML и PHP из строки.

htmlspecialchars() — конвертирует только специальные символы (‘&’, ‘»‘, »’, ‘<‘ и ‘>’) в HTML сущности (‘&amp;’, ‘&quot;’…). Используется для фильтрации вводимых пользователем данных для защиты от XSS-атак.

htmlentities() — конвертирует все символы в строке (кроме букв) в мнемоники HTML. Используется для защиты от XSS, являясь более гибким аналогом htmlspecialchars.

stripslashes() — удаляет заэкранированные символы (после преобразования в сущности предыдущими функциями их незачем экранировать). Обычно используется в связке с проверочной функцией get_magic_quotes_gpc(), показывающей текущую установку конфигурации magic_quotes_gpc.

Эта конфигурация влияет на то, как будут обрабатываться специальные символы, содержащиеся в данных, передаваемых пользователем (массивы $_GET, $_POST, $_COOKIE). При magic_quotes_gpc = 1 эти спецсимволы (одиночные и двойные кавычки, обратный слэш, байт NULL) автоматически экранируются. При magic_quotes_gpc = 0 все данные передаются в таком виде, в каком их ввел пользователь. В последнем случае в целях безопасности требуется обрабатывать передаваемые данные.

mysql_real_escape_string — мнемонизирует специальные символы в строке для использования в операторе SQL с учётом текущего набора символов в кодировке соединения. Иными словами, функция превращает любую строку в правильную и безопасную для MySQL-запроса. Используется для очистки всех данных, передающихся в MySQL-запрос для защиты от SQL-инъекций.

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

скачать PHP скриптInputClear.phps - фильтрация введённых пользователями данных.

Если кто-то обнаружит ошибки, или знает способ лучше — добро пожаловать в комментарии, мне очень интересно.

Жилинский Владимир.



Резервирование и бэкап — зачем и как.

33 комментария

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

Начнём с сайта. Среднестатистический сайт — это набор файлов на диске и база данных, как правило — MySQL.

С базой данных особых проблем не вижу:

  • для WordPress есть плагин WordPress Database Backup WordPress Database Backup, который сохраняет базу по расписанию и отправляет её на e-mail
  • для других систем можно воспользоваться скриптом Sypex Dumper Sypex Dumper, или настроить дамп и отправку по почте самостоятельно (несколько строк кода).

С сохранением файлов сайта чуть сложнее. Можно просто периодически сохранять их вручную, но можно и автоматизировать.

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

<?php require_once('pclzip.lib.php');
$date = date('Y-m-d');
$archive = new PclZip("$date.zip");
$v_list = $archive->add('../');
if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); }

В этом примере $v_list — это относительный путь к архивируемому каталогу или список каталогов и фалов через запятую. Выбирайте сами, что именно нужно резервировать.

После этого можно сделать дамп MySQL базы и добавить его в этот архив, а потом, например, отправить полученный архив по почте с помощью класса PhpMailer PhpMailer и удалить его чтобы не занимал место. Запускать этот процесс можно с помощью планировщика у хостинг-провайдера (у Majordomo бесплатный) или (если это WordPress) с помощью WP-Cron WP-Cron.

Законченного решения я не выложил, но конструктор укомплектован — собирайте кому что нужно, все части надёжны и проверены.

Следующий эпизод — локальный компьютер. Тут стоит сразу определиться — что именно резервировать. Для больших и редко используемых файлов (фото, видео, архивы) я поставил себе под стол старенький компьютер под Ubuntu, настроил NFS и забыл о нём — приходя домой я получаю доступ к этим файлам, а в крайнем случае — можно и удалённо залезть.

А для регулярного бэкапа текущих проектов вполне подойдёт Gmail. Бесплатный почтовый ящик вмещает до 10Gb данных, а самый интересный фокус в том, что его можно подключить как обычный диск — как в Linux GmailFS, так и под Windows GMail Drive. А сохранять туда нужные файлы тоже можно кроном, или его Windows-аналогом — nnCron + nnBackup nnCron.

А заодно посмотрим, что об этом думают другие участники конкурса на лучший способ бэкапа личных данных.

Жилинский Владимир.



Старые проблемы WordPress.

24 комментария

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

Помните, чуть больше года назад пользователи, переходящие из ЖЖ (LiveJournal.com) лихорадочно искали удачные сборки Nested Comments + Subscribe To Comments? Я помню.

Проблема первая — древовидные комментарии.

Выходя из того же ЖЖ, новые пользователи ждали и ждут наличия в WordPress привычной и действительно необходимой функциональности — возможности ответить на любой комментарий и получить ответы на e-mail. По какой причине это так и не включили в официальный дистрибутив — загадка. А по какой причине это до сих пор нельзя реализовать без шаманского бубна — большая загадка.

Threaded comments - древовидные ветвящиеся комментарии в WordPress

Вот возможные варианты реализации:

  • Brian’s Threaded Comments (тот самый первый Nested Comments) — криво реализован на JavaScript, с коверканьем кода и превращением установку других плагинов в окончательное шаманство. Требует замены comments.php, не поддерживает стандартный WordPress Plugin API. Иными словами, это даже не плагин — это костыль.
  • Alex’s Threaded Comments — его форк, на вид не отличить.
  • YATCP — упрощённая версия. Очень упрощённая, за счёт этого абсолютно неудобная.
  • WordPress Thread Comment — китайская версия. Немного лучше BTC, но в целом — тот же JavaScript и безумие с кроссбраузерной версткой.
  • Disqus — монстроподобный и избыточно функциональный внешний сервис.
  • Intense Debate — аналог Disqus.

Подводя черту, можно сказать, что нормального, рабочего плагина, основанного на WP Plugin API и работающего без проблем просто нет. В этом блоге никаких threaded-комментариев не будет, пока я не найду или не напишу что-то работоспособное.

Проблема вторая — авторизация.

Писать в каждом блоге своё имя, адрес почты, блога и сколько будет 39+54 все уже порядком подустали, а единой системы авторизации нет даже на горизонте. Нужен аналог Яндекс.Паспорт или Google Accounts, например. Или плагин, который будет работать с аналогичной системой авторизации — с Google это, кажется, даже возможно. Да, есть OpenID — ещё одна группа кривых плагинов:

  • WP-OpenID — в данный момент его можно проверить у меня в комментариях. Мой аккаунт в ЖЖ считает анонимом, но комментарии принимает (!). С Я.Блогами работает отлично, но почему нет вообще никаких настроек? И ЖЖ — это не самый малоизвестный сервис.
  • Alternate OpenID for WordPress — альтернативный и опять же упрощённый до бесполезности вариант.

Есть ещё правда наш русский альтернативный проектOne-Face.ru (его тоже можно попробовать у меня в комментариях). Он построен на собственном протоколе на основе Flash. Однажды зарегистрировавшись и залогинившись, во все подключенные блоги можно авторизоваться в один клик. Это, оказывается, весьма удобно, но создателям ресурса я уже посоветовал озаботиться разработкой не_флэш_версии плагина и дизайном этих модулей.

Именно по этим двум направлениям очень хочется улучшения. А не через раз работающих флэш-загрузчиков в админке.

Жилинский Владимир.




© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.