Спам в комментах

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

kid
kid
Репутация: 0
Сообщения: 20
Зарегистрирован: 03.02.2017
С нами: 7 лет 1 месяц

Сообщение #1 kid » 10.02.2017, 10:08

OkayCMS отличная система, недавно начал пользоваться, осваиваю. Но спам замучил уже - сайт только делается, клиентов нет, а спамеров уже полно, как только они узнали. Причем пробивают капчу легко.
Способ защиты есть простой, только нужна помощь в кодах.
Нужно перед отправкой комента и записью в бд проверить проверить поля ввода, и если там есть подстрока "http://" то ничего не делать. Путь даже спамер или робот думает, что все прошло успешно.
Если кто знает в какой скрипт вставить такой код, помогите куда и что вставить.
Думаю, такая доработка не только мне пригодится.

m1hasik M
Аватара
m1hasik M
Возраст: 32
Репутация: 31
Сообщения: 200
Зарегистрирован: 12.11.2015
С нами: 8 лет 4 месяца
Откуда: Днепр
Skype

Сообщение #2 m1hasik » 10.02.2017, 10:36

kid писал(а):OkayCMS отличная система, недавно начал пользоваться, осваиваю. Но спам замучил уже - сайт только делается, клиентов нет, а спамеров уже полно, как только они узнали. Причем пробивают капчу легко.
Способ защиты есть простой, только нужна помощь в кодах.
Нужно перед отправкой комента и записью в бд проверить проверить поля ввода, и если там есть подстрока "http://" то ничего не делать. Путь даже спамер или робот думает, что все прошло успешно.
Если кто знает в какой скрипт вставить такой код, помогите куда и что вставить.
Думаю, такая доработка не только мне пригодится.

Если только для http то нужна вот такая кнострукция
$pos = stripos($comment->text, 'http');
if ($pos === false) {
echo "строка не найдена, значит все ок'";
}


Но это вообще не правильно так делать, ну и не особо надежно.
Но если хотите такую защите, то можете сделать вот такую проверку, в файле где принимается коммент, например если к товару то в view/ProductView.php
И обернуть в такое условие, что бы коммент добавлялся тогда, когда нет http в строке, но это по факту не защита))

kid
kid
Репутация: 0
Сообщения: 20
Зарегистрирован: 03.02.2017
С нами: 7 лет 1 месяц

Сообщение #3 kid » 10.02.2017, 15:26

m1hasik писал(а):Но это вообще не правильно так делать, ну и не особо надежно.
Но если хотите такую защите, то можете сделать вот такую проверку, в файле где принимается коммент, например если к товару то в view/ProductView.php
И обернуть в такое условие, что бы коммент добавлялся тогда, когда нет http в строке, но это по факту не защита))

Тут самое сложное для меня именно обернуть, вставить в тело скрипта куда нужно, и еще ексит сделать или другим путем прекратить отсылку.
Про надежность полностью согласен, это не защита. Но убъет 80% спама, потому что зачем еще его рассылать, если ссылки свои не вставлять.

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #4 korshunov » 11.02.2017, 06:59

kid писал(а):Но убъет 80% спама, потому что зачем еще его рассылать, если ссылки свои не вставлять.

Если Вам важны именно ссылки в комментариях, то можно сделать так: простая замена
$comment->text = $this->request->post('text');
на
$comment->text = $this->request->post('text');
$comment->text = strip_tags ($comment->text);
приведет к тому, что из текст комментария будут вырезаться все теги HTML, в частности, ссылки.

Если хочется не принимать комментарии с тегами, то пробуйте так:
1. заменить
$comment->text = $this->request->post('text');
на
$comment_raw = $this->request->post('text');
$comment->text = strip_tags ($comment_raw);

2. после
// Проверяем капчу и заполнение формы
вставить
if ($comment->name!=$comment_raw) {
$this->design->assign('error', 'bad_content');
} else

3. В шаблоне расшифровать bad_content (хотя для роботов и не обязательно стараться)

kid
kid
Репутация: 0
Сообщения: 20
Зарегистрирован: 03.02.2017
С нами: 7 лет 1 месяц

Сообщение #5 kid » 13.02.2017, 12:49

В каком файле редактировать? CommentsAdmin.php, FeedbacksAdmin.php или другом?
Нигде не нашел файла с "// Проверяем капчу и заполнение формы"
ЗЫ. почему-то думал, что спаиеры хоть на сайт заходят, чтоб комент отправить, посещаемость поднимают. Так нет ведь - только за сегодня 37 коментов все со ссылками, а счетчик от мейлру их никого не показал!

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #6 korshunov » 13.02.2017, 15:03

Несколько файлов есть, например view/BlogView.php

kid
kid
Репутация: 0
Сообщения: 20
Зарегистрирован: 03.02.2017
С нами: 7 лет 1 месяц

Сообщение #7 kid » 14.02.2017, 12:09

Спасибо, пробую,
$comment_raw = $this->request->post('text');
$comment->text = strip_tags ($comment_raw);
не работает
Заменил
if ($comment->name!=$comment_raw) {
$this->design->assign('error', 'bad_content');
} else
на
if ($comment->text!=$comment_raw) {
$this->design->assign('error', 'bad_content');
} else

пропускает все урлы .

Добавлено спустя 1 час 37 минут:
у меня раньше работало
if (ereg("href", $dopoln)) {
...
exit;
}

Так можно здесь?

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #8 makki » 14.02.2017, 14:20

Если речь идет о спаме в комментариях к блогу, то надо править как уже выше сказали файл view/BlogView.php

1. Перед строкой 48

Код: Выделить всё

if ($this->settings->captcha_post && ($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))) {

добавляем

Код: Выделить всё

$pos = stripos($comment->text, 'http');


2. После строки 49

Код: Выделить всё

$this->design->assign('error', 'captcha');

добавляем

Код: Выделить всё

            } elseif ($pos !== false) {
               $this->design->assign('error', 'spam_detected');
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

kid
kid
Репутация: 0
Сообщения: 20
Зарегистрирован: 03.02.2017
С нами: 7 лет 1 месяц

Сообщение #9 kid » 16.02.2017, 15:52

Сделал, работает успешно, но возвращает на ту же страницу в блоге.
Хочу спамера направить на главную сайта.
если написать
elseif ($pos !== false) {
header('Location: http://www.example.com/');
exit;
');
будет работать и отправлять на главную?

siteapp M
siteapp M
Возраст: 32
Репутация: 7
Сообщения: 118
Зарегистрирован: 12.01.2016
С нами: 8 лет 2 месяца

Сообщение #10 siteapp » 30.11.2017, 15:22

А в обратный звонок как вляпить?
:eh:

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #11 makki » 30.11.2017, 15:27

Тут описано
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 7 месяцев
Откуда: Харьков

Сообщение #12 dimon » 03.06.2018, 05:08

А как помимо http закрыть:
.ly
SEO
$$
url
<a
.com
.ru
forum
copy
href

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #13 korshunov » 03.06.2018, 07:33

Примерно так:

$comment_raw = $this->request->post('text');
$comment->text = str_replace('.ly', '', $comment_raw);
$comment->text = str_replace('SEO ', '', $comment_raw);
...
$comment->text = str_replace('href', '', $comment_raw);
$comment->text = $comment_raw;

Либо, если хотите изменять текст более сложным обрабом (например, удаляя полный домен), то использовать регулярные выражения...


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 46 гостей