DLE – Избавляемся от спама в комментариях

Веб разработка » CMS DLE

Последнее время DLE подвергается массовым спам атакам. Это и регистрация ботов, и спам в комментариях. Каптча уже не помогает, спам программы становятся все более продвинутыми и легко считывают каптчи. Самый простой способ — просто поставить запрет на ссылки.

Как бороться с ботами описано тут, а со спамом в комментариях мы разберемся ниже.

Запрет на публикование ссылок в комментариях

Открываем engine/modules/addcomments.php и находим такой текст на 130+ строке

if( dle_strlen( $name, $config['charset'] ) > 20 ) {
    $stop[] = $lang['news_err_1'];
    $CN_HALT = TRUE;

Ниже добавляем:

//antispamer
if (preg_match ("/href|url|http|www|.ru|.com|.net|.info|.org/i", $_POST['comments']) || preg_match ("/href|url|http|www|.ru|.com|.net|.info|.org/i", $_POST['name']))
{
$stop[] = "URL адреса сайтов в комментариях публиковать ЗАПРЕЩЕНО!";
$CN_HALT = TRUE;
}
//end of antispam

Настройка параметров

preg_match ("/href|url|http|www|.ru|.com|.net|.info|.org/i", $_POST['comments']
preg_match ("/href|url|http|www|.ru|.com|.net|.info|.org/i", $_POST['name']

Две строки выше, если описывать дословно, делают следующее: если в поле для комментариев или для имени комментатора находится данный текст, а именно — href|url|http|www|.ru|.com|.net|.info|.org, то выводить следующий текст ошибки:

$stop[] = "URL адреса сайтов в комментариях публиковать ЗАПРЕЩЕНО!";

Запрет комментирования с отключенным JavaScript

Отключенный JavaScript с высокой вероятностью указывает на то, что попытка оставить комментарий осуществляется из стороннего программного обеспечения и крайне редко — он действительно выключен в браузере

Добавить код ниже туда же, где добавляли код из примера выше, под него или над ним

if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) && empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
$stop[] = 'У вас отключен javascript или комментарий является спамом';
$CN_HALT = TRUE;
}

Автор: rocksmart

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