Arhar Опубликовано 24 Октября 2007 Жалоба Поделиться Опубликовано 24 Октября 2007 Название: Анти дублирование сообщений v2Добавил: ArharДобавлен: 24 Окт 2007Обновлен: 03 Ноя 2008Категория: IP.Board 2.1.x Анти реклама нового поколения. Не против ботов, против людей.+ Защита в ЛС(PM) Вполне претендует на законченный вариант. Возможно подойдет и для старших версий, не проверял Нажмите здесь, чтобы скачать файл Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 24 Октября 2007 Жалоба Поделиться Опубликовано 24 Октября 2007 почему я думаю что: есть замечательная функция strip_tagsвсе ббкоды можно уничтожить не думая о том какие они100% совпадения можно откидывать без всякого вычисления вероятности - более того это будет в 80% случаев срабатыватьусловие проверки вероятности явно переполнено логикой и вычислениями Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 24 Октября 2007 Автор Жалоба Поделиться Опубликовано 24 Октября 2007 чем-то стриптегс не понравился...он конечно работает, но если много напихано урлов и картинок, и картинок в урлах, он все нафиг выкидывает, что не есть хорошо Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 24 Октября 2007 Жалоба Поделиться Опубликовано 24 Октября 2007 Предвкушаю продолжительную жаркую дискуссию Не против ботов, против людей.Ага, нужно для гостей другой запрос сделать, так фигово.есть замечательная функция strip_tagsвсе ббкоды можно уничтожить не думая о том какие они100% совпадения можно откидывать без всякого вычисления вероятности - более того это будет в 80% случаев срабатыватьусловие проверки вероятности явно переполнено логикой и вычислениями+1 # And convert it back again... $txt = str_replace( "<#EMO_DIR>", "<#EMO_DIR#>", $txt ); # Legacy $txt = preg_replace( "#<!--emo&(.+?)-->.+?<!--endemo-->#", "\\1" , $txt );Почему смайлики несут смысловую нагрузку? $txt = preg_replace( "#<a href=[\"'](http://|https://|ftp://|news://)?(\S+?)['\"].+?".">(.+?)</a>#" , "\\1\\2" , $txt );Имхо \\1 \\2, не? array_diffФу... Полюбому нужны отдельные словари для "особый" слов, не стоит все учитывать при сравнении. Да и повторяющиеся тоже хорошо бы по-другому учитывать. if ( $this->ipsclass->vars['allow_images'] )Зачем? Я бы в любом случае вырезал, вне зависимости от настроек, они могли и измениться. Или это настройка мода? P.S. Пока что всё, но есть ещё надумки Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 24 Октября 2007 Жалоба Поделиться Опубликовано 24 Октября 2007 Обрабатывай их до strip_tags. В твоем случае получается на отправку сообщения (нормального!) 3-и блока регулярок:2 на проверке1 на пост-отправке Итого что надо что бы PHP скушал всю память? Правильно. Отправлять большие спам сообщения. Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 24 Октября 2007 Автор Жалоба Поделиться Опубликовано 24 Октября 2007 для гостей как-то не подумал..а чем плох такой запрос, ведь у гостя мембер ид=0, и в таблице постов тоже вроде как 0... смайлики эт те же картинки, нет?если пост из одних смайликов, а потом еще раз из этих смайликов... strip_tags убивает все внутри <img ... /> сразу \\1\\2 не важно, там все небуквенные символы все равно на пробелы заменяютсяа потом много пробелов на один повторяющиеся ему пофигу, он ищет различные вообщемеждуarray('test','tset,'test','test')иarray('test','tset')нет разницы настройка... ну так вроде на форум постим, если он один раз отпостил без парсинга, то и сравнивать будем с отпостеным без парсинга далее плиз получили попроще $txt = $post1['post']; $txt = str_replace( "<br>" , "\n", $txt ); $txt = str_replace( "<br />", "\n", $txt ); # Make EMO_DIR safe so the ^> regex works $txt = str_replace( "<#EMO_DIR#>", "default", $txt ); # New emo $txt = preg_replace( "#<([^>]+?)emoid=\"(.+?)\"([^>]+?)".">#is", "\\2", $txt ); # And convert it back again... $txt = str_replace( "default", "<#EMO_DIR#>", $txt ); # Legacy $txt = preg_replace( "#<!--emo&(.+?)-->.+?<!--endemo-->#", "\\1" , $txt ); //----------------------------------------- // Clean up nbsp //----------------------------------------- $txt = str_replace( ' ', "\t", $txt ); $txt = str_replace( ' ' , " ", $txt ); $txt = preg_replace( "#<img style=[\"']float:(left|right)[\"'] .+? src=[\"'](\S+?)['\"].+?".">#" , "\\2" , $txt ); //Image resize mod(add after "#<img" this simbols ".+?") $txt = preg_replace( "#<img .+? src=[\"'](\S+?)['\"].+?".">#" , "\\1" , $txt ); $txt = preg_replace( "#<img src=[\"'](\S+?)['\"].+?".">#" , "\\1" , $txt ); //----------------------------------------- // Email, URLs //----------------------------------------- $txt = preg_replace( "#<a href=[\"']mailto:(.+?)['\"]>(.+?)</a>#" , "\\2" , $txt ); $txt = preg_replace( "#<a href=[\"'](http://|https://|ftp://|news://)?(\S+?)['\"].+?".">(.+?)</a>#" , "\\1\\2" , $txt ); //----------------------------------------- // Tidy up the end quote stuff //----------------------------------------- $txt = preg_replace( "#(\[/QUOTE\])\s*?<br />\s*#si", "\\1\n", $txt ); $txt = preg_replace( "#(\[/QUOTE\])\s*?<br>\s*#si" , "\\1\n", $txt ); $txt = strip_tags($txt); /*return*/ $txt = trim(stripslashes($txt)); Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 24 Октября 2007 Жалоба Поделиться Опубликовано 24 Октября 2007 а чем плох такой запрос, ведь у гостя мембер ид=0, и в таблице постов тоже вроде как 0...Допустим ты выбираешь N последних постов пользователей, тогда для гостей нужно выбирать N*количество_гостей_за_время_T, или фильтровать гостей не по ид, а по ИП например. если пост из одних смайликов, а потом еще раз из этих смайликов...А если сначалоword1 word2а потомword1 word2 :) :) ? Так же можно смайликами набить нужный проходной процент, смайлы имхо надо за знаки пунктуации считать. К тому и веду про "словарь". Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 24 Октября 2007 Автор Жалоба Поделиться Опубликовано 24 Октября 2007 ну смайлы прекрасно можно вырезать, убрав \\1 к ип нет смысла привязывать, переподключился на анлиме и спамьи потом, для спама, который быстрей-быстрей отправляется, 10 сообщений нормально Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 24 Октября 2007 Жалоба Поделиться Опубликовано 24 Октября 2007 Ну значит надо вырезать который быстрей-быстрей отправляетсяБоты часто возвращаются и через несколько дней с идентичным сообщением. Так что нужно для гостей брать последние посты конкретного гостя. А уж как определять, по IP или по маске(наверное так, можно посмотреть какие там IP будут) это другой вопрос, ещё сложней. Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 24 Октября 2007 Жалоба Поделиться Опубликовано 24 Октября 2007 Картинки можно вытаскивать совершенно иначе. Вообще алгоритм сжатия текста старого сообщения должен быть следующим: 1. проверяем на наличие ссылок в тексте (тэг якоря)1.1 ссылки есть запускаем модуль парсинга ссылок - модуль возвращает все без якорей2. проверяем на наличие изображений в тексте (можно вообще определять по наличию ссылок jpg|gif и т.д.)2.1 изображения есть запускаем модуль парсинга изображений - модуль возвращает урлы изображений4. Режем все теги потому что они нам больше не нужны4. Выкидываем все что не a-zа-я0-9, заменяя это пробелом5. Ужимаем пробелы Текст готов Алгоритм сжатия входного сообщения аналогичен, с той лишь разницей, что в 4 пункте мы режем все что в [] Мы получаем дополнительную логику, но при этом избавляемся от компиляций и выполнения регулярок, которые выполняются вне зависимости от того есть ли выражения попадающие под них или нет. Более того модули парсинга могут просто наполнять некоторые временные массивы. А потом эти массивы отдельно сравнивать.Другими словами есть текст и есть ссылки на изображения, вообще ссылки. Все это хранится отдельно друг от друга. После сравнения все это удаляется из памяти и все живут тихо и спокойно. Релизация с массивами вообще может быть очень красива сделана, с минимумами затрат ресурсов. Например можно обойтись всего одним массивом, который будет хранить уникальные ссылки/изображения, или быть пустым если оных нет. Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 24 Октября 2007 Автор Жалоба Поделиться Опубликовано 24 Октября 2007 короче завтра подумаю)ща уже моск не сможет... Ссылка на комментарий Поделиться на других сайтах Прочее
XTR Опубликовано 29 Октября 2007 Жалоба Поделиться Опубликовано 29 Октября 2007 Как идет тестрование? Неплохо бы добавить проверку названия темы, о чем я писал уже. Это можно сделать? Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 29 Октября 2007 Автор Жалоба Поделиться Опубликовано 29 Октября 2007 нормально идет, фильтрует пока-что только повторные нажатия на отправитьназвание темы проверять также,как и пост?с чем сравнивать? какой алгоритм?мне самому лень писать сравнение, пиши - присобачим)) Ссылка на комментарий Поделиться на других сайтах Прочее
XTR Опубликовано 30 Октября 2007 Жалоба Поделиться Опубликовано 30 Октября 2007 Да, сравнивалку я напишу на днях Кстати, вот характерный пример того, как некоторые толстолобики изгалаются, чтобы запостить свой спам в несколько разделов: $error['1193329727']="=================================================== Date: Thu, 25 Oct 2007 20:28:47 +0400 Member: 2499 IP Address: 78.107.206.108 Сниму квартиру 1 комнатную Строгино, Щукинская и рядомаська ****** или *******почта *******@mail.ru Precision: 100";?><?php$error['1193329746']="=================================================== Date: Thu, 25 Oct 2007 20:29:06 +0400 Member: 2499 IP Address: 78.107.206.108 Сниму квартиру 1 комнатную Строгино, Щукинская и рядомаська ****** или *******почта *******@mail.ru пишите ! :-) Precision: 94";?><?php$error['1193329777']="=================================================== Date: Thu, 25 Oct 2007 20:29:37 +0400 Member: 2499 IP Address: 78.107.206.108 Сниму квартиру однокомнатную Строгино, Щукинская и рядомаська ****** аська *******почта *******@mail.ru пишите ! :-) Precision: 88"; И таких примеров уже много Ссылка на комментарий Поделиться на других сайтах Прочее
XTR Опубликовано 7 Ноября 2007 Жалоба Поделиться Опубликовано 7 Ноября 2007 Ну, что же. На двух форумах модуль показал себя с лучшей стороны - кросс-постинг фильтруется отлично.Правда, многие пытаются сообщение менять, но 99% не хватает на то, чтобы изменить его настолько сильно, чтобы алгоритм пропустил сообщение (это при 70% пороге). Но, есть некоторые толстолобики, которые бьются до конца. Я думаю, что будет очень полезной функция автоматической блокировки учетной записи на N часов (0 - навсегда) при попытке M раз запостить дубликат. При этом желательно отправить сообщение администратору о том, что автоматическая система заблокировала пользователя с таким-то id - это для скорейшего исправления ошибочных блокировок.Спамеру можно ничего не выводить, а можно вывести сообщение о блокировке (второе, наверное, лучше).И еще, желательно, последнее сообщение т.е. то, дубликатом чего является постящееся сообщение отправить на премодерацию т.е. скрыть т.к. это вероятнее всего спам. Архар, это реализуемо? Как у тебя на форуме модуль себя показывает? Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 8 Ноября 2007 Автор Жалоба Поделиться Опубликовано 8 Ноября 2007 у меня с 30 октября пусто70% ошибок (7 из всего 10))) связаны с одновременными нажатиями, пара моих тестов, плюс один юзер пытался поздравить в двух темах с днем рождения другого юзера.. реализуемо, вот только модуль допишу один.. Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 26 Ноября 2007 Автор Жалоба Поделиться Опубликовано 26 Ноября 2007 А!!!!ЙЕС!!попался один))) Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 28 Ноября 2007 Жалоба Поделиться Опубликовано 28 Ноября 2007 В процессе доработки и поиска багов.Какая ситуация на данный момент? Ложные срабатывания были? К ПМ прикрутишь? Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 28 Ноября 2007 Автор Жалоба Поделиться Опубликовано 28 Ноября 2007 ложных точно не былоресурсоемкое, но у меня не заметно с выделением оченьмного мегабайт на скриптдругие алгоритмы писать лень, хотя оптимизировать стоило быможет кто другой придумает, как резать ббкоды к пм можно прикрутить в файле sources/lib/func_msg.php в function send_pmтолько надо учитывать если есть массовая отправка пм какая-нибудь, или письмо приветствия.. Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 7 Декабря 2007 Автор Жалоба Поделиться Опубликовано 7 Декабря 2007 К ПМ прикрутишь?ввиду появившегося спама в лсприкрутил ща пересоберу инструкцию Ссылка на комментарий Поделиться на других сайтах Прочее
XTR Опубликовано 13 Декабря 2007 Жалоба Поделиться Опубликовано 13 Декабря 2007 (изменено) Arhar, а можешь прикрутить автобан (после N попыток запостить дубль) и проверку заголовков сообщений (по списку тупым сравнением)? P.S.: Судя по скептическому настрою некоторых людей еще до написания модуля он оказался все-таки весьма полезным, не так ли? У меня режет спамеров и кросс-постеров только в путь - я уже забыл про кросс-постиг, например Изменено 13 Декабря 2007 пользователем XTR Ссылка на комментарий Поделиться на других сайтах Прочее
XTR Опубликовано 3 Января 2008 Жалоба Поделиться Опубликовано 3 Января 2008 Актуальный вопрос: Arhar, можешь ли потом посмотреть модуль на предмет совместимости с 2.3.3? Ссылка на комментарий Поделиться на других сайтах Прочее
WebGuru Опубликовано 16 Января 2008 Жалоба Поделиться Опубликовано 16 Января 2008 для 2.3 есть? Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 16 Января 2008 Автор Жалоба Поделиться Опубликовано 16 Января 2008 что за глупый вопрос, написано для когоВозможно подойдет и для старших версий, не проверял??? Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 24 Октября 2008 Автор Жалоба Поделиться Опубликовано 24 Октября 2008 Готова новая версияДобавлен автобан, пересмотрена логика регуляроксейчас соберу инструкцию изменилось вообще все, так что менять вообще весь код и настройки (см скриншот) Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения