Авг 19

MODx Evolution рассылает спам, как бороться?

Произошел случай с сайтом на MODx Evolution. Версия была довольно старая и на сайте в разных местах разместились вредоносные скрипты рассылающие спам. Masterhost, не долго думая, поместил сайт в карантин. Пришлось обновить до версии MODx 1.0.15 (чтобы не заморачиваться с переходом на новую ветку Revolution).

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

  1. Убеждаемся, что в БД нет никаких вредоносных скриптов и левых администраторов CMS;
  2. Меняем пароли на учётных записях администраторов;
  3. Делаем backup БД;
  4. Делаем backup файлов, картинок и всего того, что было загружено при эксплуатации CMS из папки assets, проверяя каждую папку на наличие вредоносного кода (в файлах *.php там, где их быть не должно); Если файлов много, их можно проверить через ai-bolit, например.
  5. Меняем абсолютно все пароли от хостинга (FTP, SSH, панель управления);
  6. Сносим старый сайт полностью;
  7. Просим разбанить сайт из карантина, поскольку всё снесено;
  8. Ставим новую версию MODx Evolution как новую;
  9. Заливаем базу и файлы из backup'а;
  10. Заливаем папку Install от MODx по-новой;
  11. Устанавливаем поверх в режиме обновления предыдущей версии. (этот шаг важен для обновления структуры БД под новую версию);
  12. Должно всё заработать.
Июл 30

Делаем форму обратной связи на сайт с защитой от спама

Встала задача организовать на сайте "Уголок веб-разработчика" форму обратной связи для сбора пользовательских мнений о том, какую тему они хотели бы видеть раскрытой на сайте. Естественно, форма не должна пропускать спам. В этой заметке я рассказываю, как сделать подобную форму.

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

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

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

<form method="post">
<input type="hidden" name="send" value="1"/>
<p>Уважаемый гость! Если Вам интересен наш проект, 
предложите, пожалуйста, тему, которую Вам было бы интересно
видеть разобранной на страницах нашего
сайта или блога:</p>
<textarea name="theme"></textarea>
<br/>
<img src="kindex.php?<?php echo session_name()?>=<?php echo session_id()?>" 
width="120" height="60"><br/>
Введите анти-спам код с картинки:<br/>
<input name="keystring"><br/>
<input type="submit" value="Отправить"/>
</table>
</form>

Форма приведена без какого-либо оформления и CSS-стилей.

Далее рассмотрим скрипт отправки письма:

// получение темы
$theme = htmlspecialchars($_REQUEST['theme'], ENT_QUOTES);

// отправка письма
$subject = 'Тема для разбора с сайта codething.ru';
$mailto = 'mike@pestr.ru';
$headers = "From: mike@pestr.ru";
$message = "Тема: $theme";
$message = iconv("utf-8", "koi8-r", $message);
mail($mailto, $subject, $message, $headers);

Не забывайте заменить мой почтовый адрес mike@pestr.ru на свой!

Перед отправкой функцией mail() сообщение перекодируется в кодировку KOI8-R (так исторически сложилось для электронной почты), в данном скрипте перекодировка идет из формата UTF-8, т.к. сами скрипты я всегда сохраняю в UTF-8, но если вы решите, что вам удобнее использовать windows-кодировку, то пожалуйста, только не забудьте заменить "UTF-8" на "CP1251" в вызове функции iconv() и перекодировка также будет проходить нормально.

Теперь осталось собрать всё в кучу и добавить проверку правильности ввода CAPTCHA для защиты от спама.

Получившийся в итоге программный код будет выглядеть так:

<?php
session_start();
if ($_REQUEST['send']!='')
{

  if(!isset($_SESSION['captcha_keystring']) || 
     $_SESSION['captcha_keystring'] != $_REQUEST['keystring'])
  {
    $message="<p>Форма не отправлена!</p>";
  }
  else
  {
    // получение темы
    $theme = htmlspecialchars($_REQUEST['theme'], ENT_QUOTES);

    // отправка письма
    $subject = 'Тема для разбора с сайта codething.ru';
    $mailto = 'mike@pestr.ru';
    $headers = "From: mike@pestr.ru";
    $message = "Тема: $theme";
    $message = iconv("utf-8", "koi8-r", $message);
    mail($mailto, $subject, $message, $headers);
    $message="<p>Форма отправлена!</p>";
  }
}

if ($message!="")
{
  echo $message;
}
else
{
?>
  <form method="post">
  <input type="hidden" name="send" value="1"/>
  <p>Уважаемый гость! Если Вам интересен наш проект,
  предложите, пожалуйста, тему, которую Вам было бы интересно
  видеть разобранной на страницах нашего сайта или блога:</p>
  <textarea name="theme" ></textarea>
  <br/>
  <img src="kindex.php?<?php echo session_name()?>=<?php echo session_id()?>"
  width="120" height="60"><br/>
  Введите анти-спам код с картинки:<br/>
  <input name="keystring"><br/>
  <input type="submit" value="Отправить"/>
  </table>
  </form>
<?
}
?>

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

Вставку этого кода к себе на сайт я сделал через тег <IFRAME>, можно посмотреть, как это работает на главной странице сайта codething.ru.

Июн 29

О скругленных углах

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

Изначально она была прямоугольной (справа). Мне порекомендовали сделать её со скругленными углами (слева). Сделал оба варианта и выложил скриношты для сравнения вконтактик.

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

Подавляющее большинство голосовавших выбрали скругленные углы! А мне в данном случае казалось, что без разницы, лишь бы форма правильно работала.

Кстати, углы весьма просто скругляются в вебе с помощью css-свойства border-radius.

Например, так:

border-radius: 10px;

К сожалению, данное свойство не работает в старых браузерах, таких как IE 6. Углы там остаются прямыми.

Более подробно о скруглении углов можно прочитать тут:
http://htmlbook.ru/css/border-radius

Фев 12

Быть фрилансером. С чего начать?

Перед тем как стать фрилансером, подумайте хорошо, надо ли это вам. Оцените плюсы и минусы данного вида деятельности.

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

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

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

Июн 09

Лето, солнце, отпуск

Заметил, что летом наблюдается сезонное снижение посещаемости на моих проектах. Видимо связано это с тремя факторами:

  1. Сады-огороды
  2. Отдых на природе
  3. Отпуска и поездки

А как у вас летом с посещаемостью, уважаемые читатели?