Detector Bots
-
- phpBB 1.4.3
- Сообщения: 79
- Стаж: 19 лет 3 месяца
- Откуда: Минск
это Гость бесправный. Смерд. Я об этом писал тут: здесь "Ником" будет системное имя гостя - у кого как установлено - "Гость" или "Anonymous"
Добавлено спустя 3 минуты 11 секунд:
простая проверка: Если бы это был зарегистрированный пользователь, в письме админу было бы указано количество постов, написанных этим пользователем ранее (т.е. 0 для новичка), а для Гостя (т.е. незалогинившегося посетителя) это поле остается пустым!
Добавлено спустя 3 минуты 11 секунд:
простая проверка: Если бы это был зарегистрированный пользователь, в письме админу было бы указано количество постов, написанных этим пользователем ранее (т.е. 0 для новичка), а для Гостя (т.е. незалогинившегося посетителя) это поле остается пустым!
Думал, в сказку попал??? Нее... ты в жизнь вляпался!
Авторские проекты: www.tuning.by | www.blume.by
Авторские проекты: www.tuning.by | www.blume.by
-
- phpBB 2.0.3
- Сообщения: 368
- Стаж: 20 лет
Может это от того, что форма быстрого ответа доступна всем? Вот через нее и пытается спамить незареганый гость.Бродяга писал(а):Подтверждаю. Фиксируются попытки гостя запостить всякую... э... бяку. и это при том, что на моем форуме ЗАПРЕЩЕНО постить гостям! Т.е. гость в принципе не должен дойти до этапа отправки сообщения... Что это? Новый способ спамить
Нет, не то сказал... Посмотрел у себя - форма для гостей не доступна. По крайней мере у меня.

-
- phpBB 2.0.1
- Сообщения: 252
- Стаж: 20 лет
- Благодарил (а): 2 раза
-
- phpBB 1.0.0
- Сообщения: 5
- Стаж: 19 лет 1 месяц
Вот какая проблема после установки 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".... в общем не у всех были русские админки...
----
На форуме стоит по умолчанию русский яз.
Если юзер выбирает в своем профайле англицкий и пытается зайти на форум после регирстрации (а она проходит успешно), то форум блокируется и выдается
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".... в общем не у всех были русские админки...

-
- Former team member
- Сообщения: 3942
- Стаж: 19 лет 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. Не проверил в режиме буржуйского.
должно быть
$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. Не проверил в режиме буржуйского.

Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
-
- phpBB 1.4.3
- Сообщения: 79
- Стаж: 19 лет 3 месяца
- Откуда: Минск
yer
Собственно, Поручик уже ответил на Ваш вопрос, хотя эта проблема была решена еще 10.03.2006
Странно, что только теперь начинают спрашивать
и будет вам счастье
Собственно, Поручик уже ответил на Ваш вопрос, хотя эта проблема была решена еще 10.03.2006


Для админов отключен изначально: сбрасывается счетчик ссылок, поэтому админы могут постить что хотят и сколько хотят. Модераторы..... Ну, если хотите также модераторам позволить все, замените if ($userdata['user_level'] == ADMIN && $userdata['session_logged_in']) {$link_count=0;} наautoman писал(а):как можно для модеров и админов отключить Detector Bots ?
Код: Выделить всё
if (($userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD) && $userdata['session_logged_in']) {$link_count=0;}
Думал, в сказку попал??? Нее... ты в жизнь вляпался!
Авторские проекты: www.tuning.by | www.blume.by
Авторские проекты: www.tuning.by | www.blume.by
-
- phpBB 1.0.0
- Сообщения: 5
- Стаж: 19 лет 1 месяц
-
- phpBB 1.2.0
- Сообщения: 14
- Стаж: 19 лет 1 месяц
- Откуда: Москва
Спасибо огромное ! В целом такой подход, считаю, даёт верное направление для поиска решения проблемы, но есть вопрос.Бродяга писал(а):Можно.
ID этой группы известен? Если да, то тут все просто:
после проверки на админа добавитьгде вместо ## нужно подставить 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; }
Строчку 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'];
Может быть, следовало бы сформировать переменную для sql-запроса так ?
Код: Выделить всё
$sql = "SELECT * FROM " . USER_GROUP_TABLE ."
WHERE group_id = ## AND user_id =
".$userdata['user_id'].";";
-
- phpBB 1.4.3
- Сообщения: 79
- Стаж: 19 лет 3 месяца
- Откуда: Минск
Selestris, респект.
С замечанием
Корректней будет построить конструкцию в таком виде:
тот вариант решения я писал прямо тут, не тестируя
главным образом чтобы показать направление, в котором нужно смотреть (читай думать) 
Добавлено спустя 1 минуту 46 секунд:
уважаю конструктивную критику!
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
Авторские проекты: www.tuning.by | www.blume.by
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 21 год 1 месяц
- Поблагодарили: 2 раза
Лучше не OR, а IN(), кроме того к условию желательно добавить, я точно сейчас название колонки не помню, что-то вроде group_single_user, если оно 1, то это группа, в которой находится сам юзер (это нужно для расстановки прав доступа к приватным форумам "поюзерно" и не нужно в нашем случае).Бродяга писал(а):Корректней будет построить конструкцию в таком виде:
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 1.4.3
- Сообщения: 79
- Стаж: 19 лет 3 месяца
- Откуда: Минск
и тут мы подходим к вопросу оптимизации SQL-запросов... 
да, IN() работает быстрее OR'a. Но я бы стал говорить о такой замене (и добавлении(!?!) еще одной таблицы в запрос) только в комплексе мер по снижению нагрузки на sql-сервер таких, как правильный порядок условий связывания (таблиц), размещение наиболее ограничительных условий (напр, group_single_user = 0 и т.п.) в конце выражения (т.к. именно оттуда начинается обработка и чем быстрее мы сузим круг поиска, тем легче будет серверу) и т.п.... Не в каком-то отдельно взятом запросе, а во всех!!!
Но если продолжить причесывание нашего примера, то с учетом замечаний Xpert'a запрос примет вид
А теперь внимание, вопрос знатокам: много ли мы выйграем в производительности использовав запрос в таком виде (в отличие от предыдущего, функционально аналогичного)? 
Но тем не менее, в итоге, Selestris, на ваш вопрос, дано не только направление "куда идти", но и обоснованное, причесанное и оптимизированное донельзя решение
Всем принявшим участие в обсуждении большое спасибо!

да, 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;";

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

Всем принявшим участие в обсуждении большое спасибо!
Думал, в сказку попал??? Нее... ты в жизнь вляпался!
Авторские проекты: www.tuning.by | www.blume.by
Авторские проекты: www.tuning.by | www.blume.by
-
- phpBB 1.2.0
- Сообщения: 14
- Стаж: 19 лет 1 месяц
- Откуда: Москва
Конструкция
, как я понимаю, имеет единственное предназначения - ограничить область просмотра, чтобы "отсечь" группы, где в таблице
(префикс)_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 в его нынешнем виде может спровоцировать поток флуда на форумы с целью переведения участников-роботов из категории новичков в категорию имеющих право размещать ссылки.
Код: Выделить всё
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 в его нынешнем виде может спровоцировать поток флуда на форумы с целью переведения участников-роботов из категории новичков в категорию имеющих право размещать ссылки.
-
- phpBB 2.0.13
- Сообщения: 917
- Стаж: 19 лет 9 месяцев
- Откуда: с Луны свалил...
Не первый раз уже вижу тут мнение, что создание бота это секундное дело. И любую защиту обойдут через пару дней. Да там люди месяцами парятся, изобретая и совершенствуя этих ботов. А им еще надо продавать их. Или думаете, установят все Детектор ботс, тут же мгновенно создадут ботов, которые без ссылок будут общаться? Любой такой мод - удар по всей этой индустрии. Их надо внедрять активно, а не годами их совершенства добиваться и в бетах мариновать. Еще когда другой VC обсуждали, столько всего наговрили о его недостатках (что это всё когда-то научатся боты проходить). В итоге тема заглохла, боты ничего проходить не научились, но все остались со старым дырявым VC. обидно даже.Selestris писал(а):В итоге может получиться так, что массовое внедрение администраторами форумов Detector Bots в его нынешнем виде может спровоцировать поток флуда на форумы с целью переведения участников-роботов из категории новичков в категорию имеющих право размещать ссылки.

-
- phpBB 1.2.0
- Сообщения: 14
- Стаж: 19 лет 1 месяц
- Откуда: Москва
Естественно, я не предлагал не использовать Detector Bots, а только предлагаю сделать в нём небольшое изменение, и в таком виде внедрять. То есть вместо различия между новичками и старичками делать различие между участниками, внесёнными администраторами в "привелегированные" группы, и не внесёнными в такие группы. Собственно, как это сделать, уже (по ходу коллективного обсуждения) написано выше. Минимальное изменение позволило бы избежать возможных проблем.
А стандартное VC боты проходят - это очевидно. Но другого, увы, по факту не имеется.
А стандартное VC боты проходят - это очевидно. Но другого, увы, по факту не имеется.
-
- phpBB 2.0.3
- Сообщения: 368
- Стаж: 20 лет
Сегодня столкнулся с такой ситуацией.
Пользователь зарегистрирован. У него есть одно сообщение. Он написал мне в ЛИЧКУ письмо, в котором помимо текста указал почтовые адреса (больше одного). Но письмо так и не дошло - мод просто обрезал его и выдал отправителю сообщение, что тот пытается разместить рекламу.
Пришлось юзеру вместо значка @ ставить [cобака].
В принципе, мод действовал правильно. Но я не думал, что правила мода распространяются на личку...
Это не претензии
- просто констатация факта.
Пользователь зарегистрирован. У него есть одно сообщение. Он написал мне в ЛИЧКУ письмо, в котором помимо текста указал почтовые адреса (больше одного). Но письмо так и не дошло - мод просто обрезал его и выдал отправителю сообщение, что тот пытается разместить рекламу.

В принципе, мод действовал правильно. Но я не думал, что правила мода распространяются на личку...
Это не претензии
