Борьба со спамом
Суть такая:
1. Приходят хрумеры и еще какие-то боты.
2. Приходят спаммеры
Надо вырезать все внешние ссылки в личных сообщениях (стоит NeoMessenger Premium).
Вырезать внешние ссылки в профилях (статус, о себе), оставлять внешние ссылки в блогах, благо они модерируются.
Есть ли какие-либо решения? Заранее спасибо.
public function replaceExternalLinks($html = ''){ function callback($matches) { return '<a href="' . $matches[1] . '" target="_blank">' . $matches[2] . '</a>'; } return $matches[2]; } $pattern = '#<a[^>]*href=[\'"]([^\'"]*)[\'"][^>]*>(((?!<a\s).)*)</a>#i'; return $filteredString; }
Игровые <a href="http://spam.com">казино</a> Вулкан
Игровые казино Вулкан
Читайте в <a href="https://localhost.ru/blog/123/">моем</a> блоге
Читайте в <a href="https://localhost.ru/blog/123/" target="_blank">моем</a> блоге
Если я правильно понимаю в \system\controllers\messages\actions\send.php
Дописываете array Описание правил валидации входных данных?
Расскажите подробнее, пожалуйста — озадачился похожим вопросом
В идеале планирую реализовать так: проверять на ссылки и номера телефонов, регулярки написал, вроде и потестил — ищу куда их корректно вписать, чтобы проверять личные сообщения.
В дальнейшем хочу внедрить то же на стену, в ленту в общем в профиль пользователя.
UPD Возникла идея склонировать хук html_filter назвать к примеру html_filterrr и в нем дописать ограничения для пользователей в $jevix->cfgSetTagCutWithContent добавить все что связано со ссылками
$jevix->cfgSetAutoReplace — все цензурирования телефонов
system\core\form.phpПодскажите, куда именно вы вставляете эту проверку?
И в нужном месте соответственно дёргаем cmsForm::replaceExternalLinks($content)
Например, заменять ссылки в лс:
(пытался на стадии action, но не помню почему не сделал там)
system\controllers\messages\model.php
public function addMessage($from_id, $recipients, $content){ foreach($recipients as $to_id){ 'from_id' => $from_id, 'to_id' => $to_id, 'content' => cmsForm::replaceExternalLinks($content) )); } }
Мне тоже нужно номера телефонов выпиливать. Поделитесь вашей регуляркой?В идеале планирую реализовать так: проверять на ссылки и номера телефонов, регулярки написал, вроде и потестил — ищу куда их корректно вписать, чтобы проверять личные сообщения.
У меня так:
/[\(+\/\\\]?(\d[+\(\)\/\\\ -]*){10,11}/
\+\d{1,3}\s\d{2,5}\s\d{5,7}
/\+[\d]{1,3}\s[\d]{2,5}\s[\d]{5,7}/
.\d+.\d{1,6}-\d{1,6}-\d{1,6}$
Ваша регулярка будет правильнее так
system\core\form.phpПодскажите, куда именно вы вставляете эту проверку?
И в нужном месте соответственно дёргаем cmsForm::replaceExternalLinks($content)
Например, заменять ссылки в лс:
(пытался на стадии action, но не помню почему не сделал там)
system\controllers\messages\model.php
Предварительно в NeoMessenger нужно отключить редиректы.
public function addMessage($from_id, $recipients, $content){ foreach($recipients as $to_id){ 'from_id' => $from_id, 'to_id' => $to_id, 'content' => cmsForm::replaceExternalLinks($content) )); } }Мне тоже нужно номера телефонов выпиливать. Поделитесь вашей регуляркой?В идеале планирую реализовать так: проверять на ссылки и номера телефонов, регулярки написал, вроде и потестил — ищу куда их корректно вписать, чтобы проверять личные сообщения.
У меня так:
/[\(+\/\\\]?(\d[+\(\)\/\\\ -]*){10,11}/
/[\(+\/\\\]?(\d[+\(\)\/\\\ -]*){10,12}/
будет оставаться последняя цифра
Регулярка под российские федеральные сотовые номера. И различные варианты их написания:Ваша регулярка будет правильнее так
иначе в номерах вида +44 203 769 18 80
/[\(+\/\\\]?(\d[+\(\)\/\\\ -]*){10,12}/
будет оставаться последняя цифра
+7 /900/ 800-300-50
8(900)8000 503
и т.д.
Подскажите а удалось ли вам реализовать сразу 2 проверки( к примеру на ссылку и на телефон)? В моделе, насколько понимаю, вызвать вторую функцию не получится, тк cmsForm::replaceExternalLinks($content) — элемент массива. Пробую функцию допиливать, через if, но в итоге как логично предположить проходит только одну проверку, в случае если подпадают 2 в одном сообщении
Регулярка под российские федеральные сотовые номера. И различные варианты их написания:Ваша регулярка будет правильнее так
иначе в номерах вида +44 203 769 18 80
/[\(+\/\\\]?(\d[+\(\)\/\\\ -]*){10,12}/
будет оставаться последняя цифра
+7 /900/ 800-300-50
8(900)8000 503
и т.д.
Я у себя пока не сделал. Но, полагаю, можно так поступить:Подскажите а удалось ли вам реализовать сразу 2 проверки( к примеру на ссылку и на телефон)?
public function replaceExternalLinks($html = '', $delPhone = false){ function callback($matches) { return '<a href="' . $matches[1] . '" target="_blank">' . $matches[2] . '</a>'; } return $matches[2]; } $pattern = '#<a[^>]*href=[\'"]([^\'"]*)[\'"][^>]*>(((?!<a\s).)*)</a>#i'; if($delPhone){ } else { return $filteredString; } }
cmsForm::replaceExternalLinks($content, true);
Я у себя пока не сделал. Но, полагаю, можно так поступить:Подскажите а удалось ли вам реализовать сразу 2 проверки( к примеру на ссылку и на телефон)?
public function replaceExternalLinks($html = '', $delPhone = false){ function callback($matches) { return '' . $matches[2] . ''; } return $matches[2]; } $pattern = '#]*href=[\'"]([^\'"]*)[\'"][^>]*>(((?!
Да, работает, спасибо
Deprecated: Non-static method cmsForm::replaceExternalLinks() should not be called statically in /home/f0471325/domains/f0471325.xsph.ru/public_html/system/controllers/messages/model.php on line 174 Deprecated: Non-static method cmsForm::replaceExternalLinks() should not be called statically in /home/f0471325/domains/f0471325.xsph.ru/public_html/system/controllers/messages/model.php on line 174
Да ...PHP такой PHP))Fatal error: Cannot redeclare callback()
Наверное, это решается как-то так:
function callback($matches) { return '<a href="' . $matches[1] . '" target="_blank">' . $matches[2] . '</a>'; } return $matches[2]; } }