Как избавиться от спама в WordPress раз и навсегда

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

Итак, первое что я сделал — это удалил все плагины с Capcha, блокированием по черным спискам и прочую неработающую фигню. Они нам больше никогда не понадобятся, а если и понадобятся — это только при регистрации.

В 99% случаев спамеры отправляют url своих ресурсов. От этого то и будем отталкиваться. В одной из предыдущих заметок я уже рассказывал, что убрал из формы отправки комментария параметр «Сайт». Так вот, спамеры все равно отправляют этот параметр заполненным в своем POST запросе. Этим то мы и воспользуемся. Если есть параметр ‘url’ — шлем спамера «подальше». Также я заметил, что спамеры в качестве текста комментария используют заголовок темы, потому если коммент будет совпадать с заголовком — шлем спамера «еще дальше».

И теперь самое главное — добавим в форму комментария свое поле, которое обязательно для заполнения. К примеру я использовал простое текстовое поле с просьбой ввести от пользователя url своего блога.

Открываем файл wp-includes/comment-template.php и ищем в нем функцию comment_form. В ней находим блок

 $fields =  array(
                'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
                            '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
                'email'  => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
                            '<input id="email" name="email" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',

В этот массив добавляем наше поле АнтиСпам.  В конечном счете оно выглядит так:

       $fields =  array(
                'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
                            '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
                'email'  => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
                            '<input id="email" name="email" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
                'spam'  => '<p class="comment-form-spam"><label for="spam">' . __( 'Antispam: please enter voip-lab.ru' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
                            '<input id="spam" name="spam" type="text" value="' . esc_attr(  $commenter['comment_author_spam'] ) . '" size="30"' . $aria_req . ' /></p>');

Далее нам будет необходимо обработать новое поле spam. Для этого открываем файл wp-comments-post.php в корне движка WordPress и находим блок

} else {
        if ( get_option('comment_registration') || 'private' == $status )
                wp_die( __('Sorry, you must be logged in to post a comment.') );
}

И сразу после него добавляем наш код, котором, если пользователь не авторизован,  будет происходить проверка что он не спамер

if ( !is_user_logged_in() ) {
    if($comment_spam!='voip-lab.ru') wp_die( __('If you are not spamer go back and set text field Antispam to voip-lab.ru.') );
    if($comment_author_url!='') wp_die( __('You are fucking spamer.') );
    if($comment_content == get_the_title($post)) wp_die( __('You are fucking spamer.') );
}

Далее необходимо отключить trackback, т.к. очень много спама валится через него. Долго искать решение не пришлось. В корне сайта просто удаляем или переименовываем файл wp-trackback.php.

На этом настройка своей АнтиСпам системы закончена. Приведу немного статистики — когда я использовал капчи и другие плагины, я удалял порядка 300-400 спам сообщений в день. В моем решении мне не пришло ни одного сообщения от спамеров. Скажем им «гуд бай» =)

Добавочный номер в IVR через транк Elastix / FreePBX

Предположим, что у нас есть 2 АТС Elastix / FreePBX объединенные через SIP/IAX2 транк с номерными планами 3XX и 4XX соответственно. Назовем их АТС1 и АТС2. Необходимо чтобы, попадая в голосовое меню IVR АТС1, можно было сделать донабор 4XX и попасть на номера АТС2.

Стандартными возможностями, на сколько мне известно, это сделать не возможно. Но можно легко обойти это ограничение. Итак, открываем файл конфигурации /etc/asterisk/extestions_custom.conf на АТС1 и/или добавляем в него контекст:

[from-did-direct-ivr-custom]
exten  => _4XX,1,Goto(outbound-allroutes,${EXTEN},1)

Сохраняемся и даем команду на рестарт:

[email protected]/etc# asterisk -rx "reload"

Установка драйвера USB Ethernet Dlink DUB-E100 с чипом С1

Сегодня пришли новые USB-адаптеры Dlink DUB-E100. Как оказалось у них новый чип C1, из-за чего Linux не видит сетевое устройство. Что-же, идем на сайт и качаем драйвер для Linux естественно. Распаковываем архив и открываем в редакторе файл asix.c. Находим строчки кода

         // DLink DUB-E100B
         USB_DEVICE (0x07d1, 0x3c05),
        .driver_info =  (unsigned long) &dlink_dub_e100b_info,
}, {

и добавляем после них блок: (далее…)

Обновление JUNOS на Juniper SRX100

IMG_0016Маленькая заметка о том, как установить свежий junos на новый juniper srx100b. Есть два варианта как обновить junos на оборудовании juniper. Первый и самый простой — это сделать через web-интерфейс. Второй — это сделать через терминальный доступ и источник, где лежит новый junos можно указать ftp, tftp, ssh host.
У первого доступа есть главный недостаток – чтобы обновить junos нужно находиться с ним в одной подсети, а когда мы смаршрутизировались из других сетей, нас на web-интерфейс уже не пустит политика безопасности, которая выглядит вот так:

 set system services web-management http interface vlan.0
 set system services web-management https system-generated-certificate
 set system services web-management https interface vlan.0

(далее…)

VirtualBox: vt-x features locked or unavailable in msr

Недавно мне задали вопрос, что не запускается виртуальная машина на VirtualBox и выдает ошибку:vt-x features locked or unavailable in msr. Она означает что:

  • На компе был заменён процессор, новый без VT-x. Тогда 64 бита не погонять.
  • В BIOS отключилась соответствующая опция (например, такое бывает на некоторых материнских платах при обновлении прошивки).
  • В момент выдачи сообщения на компе работает ещё одна программа виртуализации (VMware, VirtualPC), которая захватила VT-x, а использовать его из нескольких программ одновременно невозможно

Либо если необходимо все таки запустить машину ,то отключить опцию VT-x в Настройках виртуальной машины → Система → Ускорение.

vm

Самый простой backup-скрипт на bash Linux

В этой заметке я покажу пример самого простого бэкап-скрипта на bash Linux.

#!/bin/bash
# This is my backup file - created by 

# here I am setting a time stamp variable which I like to use for logging
TIMESTAMP=`date +%Y%m%d.%H%M`

# here I am setting up the backup directory as a variable
DEST_DIR="/backup/my-backup"

# here I am setting up the directory in which I want to backup, again another variable
SRC_DIR="/home//Documents"

# let's create a variable for the backup file name file
FNAME="MyBackup"

# let's create a variable for the log file, let's also name the log file with the filename and timestamp it
LOG="/home//log/$FNAME-$TIMESTAMP.log"

# start the backup, create a log file which will record any messages run by this script
echo -e "Starting backup of  $SRC_DIR directory" >> ${LOG}

# compress the directory and files, direct the tar.gz file to your destination directory
tar -vczf ${DEST_DIR}/${FNAME}-${TIMESTAMP}.tar.gz ${SRC_DIR} >> ${LOG}

# end the backup, append to log file created by this script
echo -e "Ending backup of  $SRC_DIR" >> ${LOG}

Сохраняем его в удобном для вас каталоге и задаем выполнение по расписанию. Для этого открываем файл /etc/crontab и в конец добавляем строку:

00 00   * * *   root    sh /home/backup/backup1c.sh

Как убрать сайт из комментариев WordPress

Небольшая заметка в мемы. Открываем файл wp-includes/comment-template.php и ищем функцию comment_form. В ней находим объявление массива $fields. И удаляем элемент url, не забывая при этом про скобки и запятые. Вот как было у меня:

$fields =  array(
                'author' => '

‘ . ‘ ‘ . ‘

‘, ’email’ => ‘

‘, ‘url’ => ‘

‘ . ‘

‘, );

Вот как стало:

$fields =  array(
                'author' => '

‘ . ‘ ‘ . ‘

‘, ’email’ => ‘

‘ );

Сохраняем файл и радуемся =)