Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Detector Bots

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Аватара пользователя
Бродяга
phpBB 1.4.3
Сообщения: 79
Стаж: 18 лет 3 месяца
Откуда: Минск

Сообщение Бродяга »

это Гость бесправный. Смерд. Я об этом писал тут: здесь "Ником" будет системное имя гостя - у кого как установлено - "Гость" или "Anonymous"

Добавлено спустя 3 минуты 11 секунд:

простая проверка: Если бы это был зарегистрированный пользователь, в письме админу было бы указано количество постов, написанных этим пользователем ранее (т.е. 0 для новичка), а для Гостя (т.е. незалогинившегося посетителя) это поле остается пустым!
Думал, в сказку попал??? Нее... ты в жизнь вляпался!
Авторские проекты: www.tuning.by | www.blume.by
Stern
phpBB 2.0.3
Сообщения: 368
Стаж: 19 лет

Сообщение Stern »

Бродяга писал(а):Подтверждаю. Фиксируются попытки гостя запостить всякую... э... бяку. и это при том, что на моем форуме ЗАПРЕЩЕНО постить гостям! Т.е. гость в принципе не должен дойти до этапа отправки сообщения... Что это? Новый способ спамить
Может это от того, что форма быстрого ответа доступна всем? Вот через нее и пытается спамить незареганый гость.
Нет, не то сказал... Посмотрел у себя - форма для гостей не доступна. По крайней мере у меня. :)
Аватара пользователя
automan
phpBB 2.0.1
Сообщения: 252
Стаж: 19 лет
Благодарил (а): 2 раза

Сообщение automan »

как можно для модеров и админов
отключить Detector Bots ?
yer
phpBB 1.0.0
Сообщения: 5
Стаж: 18 лет 2 месяца

Сообщение yer »

Вот какая проблема после установки Detector Bots
----
На форуме стоит по умолчанию русский яз.
Если юзер выбирает в своем профайле англицкий и пытается зайти на форум после регирстрации (а она проходит успешно), то форум блокируется и выдается
Parse error: parse error, unexpected T_STRING in /home/...../forum/language/lang_english/lang_main.php on line 1023
т.е. ссылка на строку
$lang['D_Bots_post_not_sent'] = 'Message wasn't sent.';
из
/* ---8<--------[Detector Bots]----------------------------------------- */
$lang['D_Bots_email_subj'] = 'Attempt of publish of advertising';
$lang['D_Bots_post_not_sent'] = 'Message wasn't sent.';
$lang['D_Bots_post_deleted'] = 'Message was deleted.';
$lang['D_Bots_user_deleted'] = 'User was deleted.';
$lang['D_Bots_user_mulcted'] = 'User catch Yellow Card and now has %d of %d Yellow Cards.';
$lang['D_Bots_msg_guest'] = 'Attempt of publish of advertising was detected.<br>If you want post links, you MUST <a href="profile.php?mode=register">register</a>.';
$lang['D_Bots_msg_user_deleted'] = 'Attempt of publish of advertising was detected.<br>User <b>%s</b> was deleted.';
$lang['D_Bots_msg_user_mulcted'] = 'Attempt of publish of advertising was detected.<br>Message wasn't sent, user <b>%s</b> catchs Yellow Card.';
/* ---8<--------[Detector Bots]----------------------------------------- */


В чем может быть причина?
Я проверил - файлы из language при установки скопированы корректно

Проблема устраняется стиранием всего выделенного кода - но тогда при попытке спама конечно же не выдается англицкого сообщения...
:?: :?
В чем м.б. дело?! Подскажите :(

Добавлено спустя 40 минут:

Ну вот, стоило покопаться в теме.... и готово - "wasn't".... в общем не у всех были русские админки... :D
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 18 лет 11 месяцев
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

$lang['D_Bots_post_not_sent'] = 'Message wasn't sent.';

должно быть

$lang['D_Bots_post_not_sent'] = 'Message wasn\'t sent.';

$lang['D_Bots_msg_user_mulcted'] = 'Attempt of publish of advertising was detected.<br>Message wasn't sent, user <b>%s</b> catchs Yellow Card.';

должно быть
$lang['D_Bots_msg_user_mulcted'] = 'Attempt of publish of advertising was detected.<br>Message wasn\'t sent, user <b>%s</b> catchs Yellow Card.';


У меня такое же было с points system. Не проверил в режиме буржуйского. :oops:
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
Аватара пользователя
Бродяга
phpBB 1.4.3
Сообщения: 79
Стаж: 18 лет 3 месяца
Откуда: Минск

Сообщение Бродяга »

yer
Собственно, Поручик уже ответил на Ваш вопрос, хотя эта проблема была решена еще 10.03.2006 ;) Странно, что только теперь начинают спрашивать :D
automan писал(а):как можно для модеров и админов отключить Detector Bots ?
Для админов отключен изначально: сбрасывается счетчик ссылок, поэтому админы могут постить что хотят и сколько хотят. Модераторы..... Ну, если хотите также модераторам позволить все, замените if ($userdata['user_level'] == ADMIN && $userdata['session_logged_in']) {$link_count=0;} на

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

if (($userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD) && $userdata['session_logged_in']) {$link_count=0;}
и будет вам счастье
Думал, в сказку попал??? Нее... ты в жизнь вляпался!
Авторские проекты: www.tuning.by | www.blume.by
yer
phpBB 1.0.0
Сообщения: 5
Стаж: 18 лет 2 месяца

Сообщение yer »

Всем спасибо!
Вообще, это отличный форум :D все вопросы решаются по деловому :D :D :D
Аватара пользователя
Selestris
phpBB 1.2.0
Сообщения: 14
Стаж: 18 лет 2 месяца
Откуда: Москва

Сообщение Selestris »

Бродяга писал(а):Можно.
ID этой группы известен? Если да, то тут все просто:
после проверки на админа добавить

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

	$sql = "SELECT group_id FROM " . USER_GROUP_TABLE . " WHERE user_id = ".$userdata['user_id'];
	if ($row = $db->sql_fetchrow($db->sql_query($sql)))
	{
		if ($row['group_id'] == ##) $link_count=0;
	}
где вместо ## нужно подставить ID этой самой привилегированной группы.
Строчку if ($row['group_id'] == ##) $link_count=0; можно повторить несколько раз с различными ID, если таких групп несколько.

Если ID группы неизвестен: лучше б он был известен! :)

Добавлено спустя 2 минуты 46 секунд:

З.Ы. Шутка. А если серьезно, то во втором случае решение будет зависеть от того, что же все-таки известно... Например, можно решить зная имя группы.
Спасибо огромное ! В целом такой подход, считаю, даёт верное направление для поиска решения проблемы, но есть вопрос.
ID группы проще простого узнать в таблице базы данных
(префикс)_groups. Допустим мы его узнали, и делаем запрос к таблице
(префикс)_user_group на основе такой переменной:

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

	$sql = "SELECT group_id FROM " . USER_GROUP_TABLE . " WHERE user_id = ".$userdata['user_id'];
Однако, связь в таблице (префикс)_user_group между атрибутами group_id и user_id типа многие ко многим. Поэтому указанный запрос приведёт нас на первую запись, где user_id = ".$userdata['user_id']; А ведь это может оказаться запись и с другой группой, не такой, какая нас интересует, даже если в файле (префикс)_user_group и содержится запись с нужным нам ID группы у данного участника. Тогда оператор if "не пропустит" такого участника, причём совершенно несправедливо !

Может быть, следовало бы сформировать переменную для sql-запроса так ?

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

 $sql = "SELECT * FROM " . USER_GROUP_TABLE ."
 WHERE group_id = ## AND user_id = 
".$userdata['user_id'].";";
Аватара пользователя
Бродяга
phpBB 1.4.3
Сообщения: 79
Стаж: 18 лет 3 месяца
Откуда: Минск

Сообщение Бродяга »

Selestris, респект.

С замечанием
Selestris писал(а):Однако, связь в таблице (префикс)_user_group между атрибутами group_id и user_id типа многие ко многим. Поэтому указанный запрос приведёт нас на первую запись, где user_id = ".$userdata['user_id']; А ведь это может оказаться запись и с другой группой, не такой, какая нас интересует, даже если в файле (префикс)_user_group и содержится запись с нужным нам ID группы у данного участника. Тогда оператор if "не пропустит" такого участника, причём совершенно несправедливо !
согласен.
Корректней будет построить конструкцию в таком виде:

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

$sql = "SELECT * FROM " . USER_GROUP_TABLE ."
WHERE (group_id = ## ". // первая привилегированная группа
   "OR group_id = ## ". // вторая привилегированная группа (строчку можно удалить/закомментить)
   "OR group_id = ## ". // третья... (строчку можно удалить/закомментить)
") AND user_id = ".$userdata['user_id'].";";
if ($db->sql_numrows($db->sql_query($sql)) > 0) $link_count=0;
тот вариант решения я писал прямо тут, не тестируя ;) главным образом чтобы показать направление, в котором нужно смотреть (читай думать) :)

Добавлено спустя 1 минуту 46 секунд:

уважаю конструктивную критику!
Selestris, спасибо!
Думал, в сказку попал??? Нее... ты в жизнь вляпался!
Авторские проекты: www.tuning.by | www.blume.by
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Бродяга писал(а):Корректней будет построить конструкцию в таком виде:
Лучше не OR, а IN(), кроме того к условию желательно добавить, я точно сейчас название колонки не помню, что-то вроде group_single_user, если оно 1, то это группа, в которой находится сам юзер (это нужно для расстановки прав доступа к приватным форумам "поюзерно" и не нужно в нашем случае).
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Бродяга
phpBB 1.4.3
Сообщения: 79
Стаж: 18 лет 3 месяца
Откуда: Минск

Сообщение Бродяга »

и тут мы подходим к вопросу оптимизации SQL-запросов... ;)
да, IN() работает быстрее OR'a. Но я бы стал говорить о такой замене (и добавлении(!?!) еще одной таблицы в запрос) только в комплексе мер по снижению нагрузки на sql-сервер таких, как правильный порядок условий связывания (таблиц), размещение наиболее ограничительных условий (напр, group_single_user = 0 и т.п.) в конце выражения (т.к. именно оттуда начинается обработка и чем быстрее мы сузим круг поиска, тем легче будет серверу) и т.п.... Не в каком-то отдельно взятом запросе, а во всех!!!

Но если продолжить причесывание нашего примера, то с учетом замечаний Xpert'a запрос примет вид

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

$sql = "SELECT *
FROM " . USER_GROUP_TABLE ." ug, ".
   GROUPS_TABLE . " g
WHERE ug.group_id = g.group_id
   AND ug.group_id IN (##, ##, ##)
   AND ug.user_id = ".$userdata['user_id']."
   AND g.group_single_user = 0;";
А теперь внимание, вопрос знатокам: много ли мы выйграем в производительности использовав запрос в таком виде (в отличие от предыдущего, функционально аналогичного)? :D

Но тем не менее, в итоге, Selestris, на ваш вопрос, дано не только направление "куда идти", но и обоснованное, причесанное и оптимизированное донельзя решение ;)
Всем принявшим участие в обсуждении большое спасибо!
Думал, в сказку попал??? Нее... ты в жизнь вляпался!
Авторские проекты: www.tuning.by | www.blume.by
Аватара пользователя
Selestris
phpBB 1.2.0
Сообщения: 14
Стаж: 18 лет 2 месяца
Откуда: Москва

Сообщение Selestris »

Конструкция

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

AND g.group_single_user = 0;
, как я понимаю, имеет единственное предназначения - ограничить область просмотра, чтобы "отсечь" группы, где в таблице
(префикс)_groups стоит group_single_user = 1 (а связанных с ними записей в таблице (префикс)_user_group, как правило, подавляющее большинство, так как для каждого пользователя создаётся "своя" группа). Но стоит ли овчинка выделки ? :) Запрос к связанным таблицам выполняется дольше, чем к одной. Кроме того,
в таблице (префикс)_user_group атрибуты group_id и user_id - это составляющие первичного ключа, то есть поиск должен происходить быстро. Поэтому, скорее всего, в этой последней части переменной sql нет необходимости.

А вот что, полагаю, нужно было бы сделать, "чтобы соблюсти все формальности", - так это дополнительную проверку на корректность получения результатов запроса к таблице (префикс)_user_group. Поэтому предлагаю:

$sql = "SELECT * FROM " . USER_GROUP_TABLE ."
WHERE group_id IN (##, ##, ##) AND user_id = ".$userdata['user_id'].";";

$result = $db->sql_query($sql);

if ($result <> false)
{
if ($db->sql_numrows($result) > 0) $link_count=0;
}

Хотя, может быть, это уже буквоедство :)

И ещё. Полагаю, что внесение администратором пользователей вручную в "элитные" группы, члены которых имеют право размещать ссылки, - гораздо более предпочтительно, чем автоматическое предоставление права размещать ссылки, начиная с энного сообщения на форуме, как предлагается в данном моде.
Дело в том, что боты рано или поздно "научатся", что надо сначала отправлять какое-то количество сообщений без ссылок, а потом уже начинать размещать ссылки. Кстати, я встречал на форумах такие многократные сообщения без ссылок, явно разосланные роботами с какой-то конкретной целью, типа "всем привет !!!" и т.д.

В итоге может получиться так, что массовое внедрение администраторами форумов Detector Bots в его нынешнем виде может спровоцировать поток флуда на форумы с целью переведения участников-роботов из категории новичков в категорию имеющих право размещать ссылки.
Аватара пользователя
edgar
phpBB 2.0.13
Сообщения: 917
Стаж: 18 лет 9 месяцев
Откуда: с Луны свалил...

Сообщение edgar »

Selestris писал(а):В итоге может получиться так, что массовое внедрение администраторами форумов Detector Bots в его нынешнем виде может спровоцировать поток флуда на форумы с целью переведения участников-роботов из категории новичков в категорию имеющих право размещать ссылки.
Не первый раз уже вижу тут мнение, что создание бота это секундное дело. И любую защиту обойдут через пару дней. Да там люди месяцами парятся, изобретая и совершенствуя этих ботов. А им еще надо продавать их. Или думаете, установят все Детектор ботс, тут же мгновенно создадут ботов, которые без ссылок будут общаться? Любой такой мод - удар по всей этой индустрии. Их надо внедрять активно, а не годами их совершенства добиваться и в бетах мариновать. Еще когда другой VC обсуждали, столько всего наговрили о его недостатках (что это всё когда-то научатся боты проходить). В итоге тема заглохла, боты ничего проходить не научились, но все остались со старым дырявым VC. обидно даже. :(
Аватара пользователя
Selestris
phpBB 1.2.0
Сообщения: 14
Стаж: 18 лет 2 месяца
Откуда: Москва

Сообщение Selestris »

Естественно, я не предлагал не использовать Detector Bots, а только предлагаю сделать в нём небольшое изменение, и в таком виде внедрять. То есть вместо различия между новичками и старичками делать различие между участниками, внесёнными администраторами в "привелегированные" группы, и не внесёнными в такие группы. Собственно, как это сделать, уже (по ходу коллективного обсуждения) написано выше. Минимальное изменение позволило бы избежать возможных проблем.

А стандартное VC боты проходят - это очевидно. Но другого, увы, по факту не имеется.
Stern
phpBB 2.0.3
Сообщения: 368
Стаж: 19 лет

Сообщение Stern »

Сегодня столкнулся с такой ситуацией.
Пользователь зарегистрирован. У него есть одно сообщение. Он написал мне в ЛИЧКУ письмо, в котором помимо текста указал почтовые адреса (больше одного). Но письмо так и не дошло - мод просто обрезал его и выдал отправителю сообщение, что тот пытается разместить рекламу. :) Пришлось юзеру вместо значка @ ставить [cобака].
В принципе, мод действовал правильно. Но я не думал, что правила мода распространяются на личку...
Это не претензии :) - просто констатация факта.

Вернуться в «Бета-версии модов для phpBB 2.0.x»