Перейти к контенту

Борьба со спамом на форуме


getz

Рекомендуемые сообщения

Про спамеров рассказывать не буду. Но пришла вот такая идея: не публиковать сообщение, содержащие URL, если автор не превысил некоторого порога (мне 1 нравится :D ) публикации сообщений.

Файл: class_post.php

Находим

//-----------------------------------------
// Do we have a valid post?
//-----------------------------------------

Вставляем

if($this->ipsclass->member['posts'] < $num_posts){
if(stristr($_POST['Post'], 'www')) $this->ipsclass->Error( array( LEVEL => 1, MSG => 'like_spamer') );
if(stristr($_POST['Post'], 'http')) $this->ipsclass->Error( array( LEVEL => 1, MSG => 'like_spamer') );
}

$num_posts - количество ссобщений, после которого можно постить URL. Я жестко вбил 1, в принципе можно ввести в настройки.

Файл: lang_error.php

like_spamer => "Данное сообщение не может быть опубликовано!",

 

Что скажите, коллеги?

-----------------------------------------------------------------------------------------------------------------------------

Остается еще одна лазейка

<form id='postingform' action='...' method='post' name='REPLIER' onsubmit='return ValidateForm()'

Тогда полезу жабускрипт мучать, если PHP не остановит. ;)

Ссылка на комментарий
Поделиться на других сайтах

Хз, имхо надо поставить ограничение постов 10...
Поживем-увидим. У меня из всех спамеров только один трижды вернулся (пока). Поэтому лично я пока ограничусь 1.
Ксати, вы на какой версии тестели?
2.1.3 В доп.полях забито :D
Ссылка на комментарий
Поделиться на других сайтах

А для 2.0 как реализовать?)
Я, к сожалению, начал сразу 2.1.3 пользовать, поэтому, увы... Думаю, если поискать, можно найти подобную проверку и там.

 

 

А что, неплохая кажется идея...

Я ее тут еще развил, мозги проветрив... ;) Сделать а настройках дополнительный параметр, забить туда www, http, .ru, .com, .net, .biz, etc... Потом explode, do... Но пока это в теории и, думаю, сложностей в реализации не вызовет и будет работать. Можно еще на этот расклад придумать проверку на количество вхождений @ в паре с .ru, .com, .net, .biz, etc... чтобы пропустить e-mail.

 

-----------------------------------------------------------------------------------------------------------------------------

Насчет жабы из первого поста: в принципе это лишнее. Перед записью в базу данных мы все равно попадем в этот класс. Вот, если в версии 2.0 нет подобной проверки и геморно ее делать, то там самое оно впомнить жабу вместе с событием onSubmit в <form /> и поиском вышеперечисленных вхождений. Только еще надо будет не забыть, например,

<input type='hidden' name='num_posts' value='...'>

Если нашлись вхождения: return false, можно еще и alert нарисовать. :D

Ссылка на комментарий
Поделиться на других сайтах

В админцентре добавил 2 настройки в Темы, Сообщения и Опросы

num_posts_for_url, значение 1

spam_filtr, значение www,http,.ru,.com,.net,.biz

В любой момент можно изменить, неизменяя кода :D

 

Файл: class_post.php

Находим

//-----------------------------------------
// Do we have a valid post?
//-----------------------------------------

Вставляем после

  if($this->ipsclass->member['posts'] < $this->ipsclass->vars['num_posts_for_url']){
$spam_filtr = explode(',', $this->ipsclass->vars['spam_filtr']);
foreach($spam_filtr as $word){
  if(stristr($_POST['Post'], $word)) $this->ipsclass->Error( array( LEVEL => 1, MSG => 'like_spamer') );
  break;
}
 }

Ссылка на комментарий
Поделиться на других сайтах

И вся ваша защита будет легко и просто обойдена, если в ссылку добавить пробелы :D.

Поподробней можно или пример ссылки? Одна дыра есть, но никак не побелы.

Ссылка на комментарий
Поделиться на других сайтах

if($this->ipsclass->member['posts'] < $this->ipsclass->vars['num_posts_for_url']){
  $spam_filtr = explode(',', $this->ipsclass->vars['spam_filtr']);
  //убираем все переводы строк (обещанная дыра)
  $post = str_replace("\n", "", $_POST['Post']);
  $post = str_replace("\r", "", $post);
  $post = str_replace(" ", "", $post);//specia for [b]d1pro[/b] :) 
  foreach($spam_filtr as $word){
 if(stristr($post, $word)) $this->ipsclass->Error( array( LEVEL => 1, MSG => 'like_spamer') );
//		 break;//почему-то косячило. как поставил комментарии, сразу все Ок стало.
  }
}

Ссылка на комментарий
Поделиться на других сайтах

А по-моему достаточно поменять циферки для регистрации(на другие) и спамеров как не бывало.

 

По дефолту стоит такое.

	function show_gif_img($this_number="")
{
	$numbers = array( 0 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIUDH5hiKsOnmqSPjtT1ZdnnjCUqBQAOw==',
					  1 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIUjAEWyMqoXIprRkjxtZJWrz3iCBQAOw==',
					  2 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIUDH5hiKubnpPzRQvoVbvyrDHiWAAAOw==',
					  3 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIVDH5hiKbaHgRyUZtmlPtlfnnMiGUFADs=',
					  4 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIVjAN5mLDtjFJMRjpj1Rv6v1SHN0IFADs=',
					  5 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIUhA+Bpxn/DITL1SRjnps63l1M9RQAOw==',
					  6 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIVjIEYyWwH3lNyrQTbnVh2Tl3N5wQFADs=',
					  7 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIUhI9pwbztAAwP1napnFnzbYEYWAAAOw==',
					  8 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIVDH5hiKubHgSPWXoxVUxC33FZZCkFADs=',
					  9 => 'R0lGODlhCAANAJEAAAAAAP////4BAgAAACH5BAQUAP8ALAAAAAAIAA0AAAIVDA6hyJabnnISnsnybXdS73hcZlUFADs=',
					);

	@header("Content-Type: image/gif");
	echo base64_decode($numbers[ $this_number ]);
	exit();
}

 

Я заменил на такое и спамеров как не бывало.

 

	function show_gif_img($this_number="")
{
	$im=ImageCreate(30,50);
	$osn=imagecolorallocate($im,0,0,0);
	$fon=imagecolorallocate($im,255,255,255);
	ImageFill($im,1,1,$fon);
	ImageString($im,rand(0,10),rand(0,22),rand(0,40),$this_number,$osn);		

	@header("Content-Type: image/gif");
	ImageGif($im);
	ImageDestroy($im);

	exit();
}

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

ботов воде таких нету. Есть проги помогающие это делать, например по нажатию на кнопку заполняют поле текста сообщения и т.п. так что в любом случае это люди.

 

я у себя на форуме сделал так:

при парсинге поста проверяю кол-во сообщений на счетчик пользователя. Если оно меньше десяти и в пост содержатся ссылки на внешние ресурсы (то есть все кроме ссылок на мой сайт и форум) - запрещаем писать собщение.

Далее идет проверка - если у человека более 10 собщений, но его акаунт был создан менее 1 часа назад - запрещаем писать сообщение.

 

Для извращения можно в куки писать кол-во попыток зарекламить (подяд, конечно), если переваливают за 10 - банить.

 

Короче говоря первых двух вариантов вместе = хватит, 99%.

Ссылка на комментарий
Поделиться на других сайтах

Боты есть и писать их ой как легко.

 

Поставь себе IEHTTPHeaders ну или что-нибудь для своего обозревателя + посмотри http://php.net/fsockopen

 

Дальше достаточно знать основы PHP, чтобы заспамить весь интернет.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

для общего развития, насчет ботов и спама:

http://exploit.in/forum/index.php?act=ST&f=35&t=2378

защититься - имхо, сложновато на данный момент

на перле можно без особых проблем все обойти, единственное, мало людей, знающих его на такой уровне

на пхп - вообще нет особых проблем

Ссылка на комментарий
Поделиться на других сайтах

Вроде бы все правильно сделал, но все равно новые пользователи, без единого сообщения, могут писать сообщения со ссылками...

 

Где я мог не то сделать?

Где конкретно выставляется пороговое значение (например, не менее 5 сообщений)?

 

Извиняюсь за глупый вопрос, я не шибко большой специалист...

Ссылка на комментарий
Поделиться на других сайтах

Название настройки: "num_posts_for_url", значение по умолчанию "1"

Название настройки: "spam_filtr", значение по умолчанию "www,http,.ru,.com,.net,.biz"

Через админцентр можно менять по ходу дела.

num_posts_for_url - количество сообщений, необходимое для публикации ссылок

spam_filtr - массив {explode()} слов, характерезующих спамера.

 

Может быть еще одна поправка: $this->ipsclass->input['TopicTitle'] может быть пустым, это значит, что пытаются ответить в тему. Как тут быть, решайте сами. Я, пока, пропускаю эти сообщения. После введения этого фильтра, был только один случай спама, да и тот без ссылок. Ну тут уж... А остальное сыпалось мне на почту, кстати, не очень долго... Оставили меня в покое...

Ссылка на комментарий
Поделиться на других сайтах

ботов воде таких нету. Есть проги помогающие это делать, например по нажатию на кнопку заполняют поле текста сообщения и т.п. так что в любом случае это люди.

 

это явно боты, поскольку тема просто валит автоматом на тысячи форумов.

 

я у себя на форуме сделал так:

при парсинге поста проверяю кол-во сообщений на счетчик пользователя. Если оно меньше десяти и в пост содержатся ссылки на внешние ресурсы (то есть все кроме ссылок на мой сайт и форум) - запрещаем писать собщение.

Далее идет проверка - если у человека более 10 собщений, но его акаунт был создан менее 1 часа назад - запрещаем писать сообщение.

 

как конкретно эти штуки прописать?

Ссылка на комментарий
Поделиться на других сайтах

У себя на pharm-forum.ru сделал защиту от автоматических постингов. Теперь при открытом доступе на посты гостям рекламы приходит 5-10 в месяц.

Суть в том, что боты (и программы) физически мышкой по кнопке [отправить] не щелкают.

На кнопку повешен джава-скрипт, добавляющий к сообщению открывающий-закрывающий теги. Дальше парсер проверяет наличие этих тегов, если ОК - заменяет спанами; если тегов нет, парсер дописывает полсотни смайликов и форум отказывается принять сообщение.Минус - пришлось отключить подписи в ПМ, там парсинг работает на отображение. Второй минус неприятней: при вводе сообщения с цитатой текст и цитата парсятся раздельно; пришлось сделать ввод тегов и для цитат; соответственно при быстром ответе и ответе без цитат происходит нефатальная ошибка скрипта - не найден объект (текстареа для цитируемого текста). В версиях IPB 2.х этой проблемы вроде быть не должно, цитата сразу в квотах выводится в единую текстареу.

Ссылка на комментарий
Поделиться на других сайтах

А я думаю, что спамеров можно отсеять регистрацией в несколько этапов. "ckb это спамер, то он запарицца регаться и откажеться от регистрации...
Ссылка на комментарий
Поделиться на других сайтах

регю вручную теперь, работает.

 

Вот такая идея возникла - а что если добавать одну строку в регистрации (например, город) и сделать ее обязательной?

Ссылка на комментарий
Поделиться на других сайтах

регю вручную теперь, работает.

 

Вот такая идея возникла - а что если добавать одну строку в регистрации (например, город) и сделать ее обязательной?

Путем усложнения регистрации отрубить спамеров - дурное дело не хитрое.

Беда в том, что у меня больше половины завсегдатаев ходят и пишут гостями, и если отрубить гостевую запись - они перестанут ходить.

Ссылка на комментарий
Поделиться на других сайтах

ничего не поделать, у меня боты сами регистрируются, юзерам же можно сказать, что регистрация позволить править свои мессаги\быстро искать новые сообщения итп. В общем, некоторые не согласятся, но если ресурс хороший, то большиество согласятся. Если же чел не умеет регистрироваться, то нахрен вообще такой чел на форуме :D
Ссылка на комментарий
Поделиться на других сайтах

убрал регистрацию, теперь стали такие темы открываться, циничные

 

Доброго времени суток

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

 

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

Кто-нибудь подскажет?

Ссылка на комментарий
Поделиться на других сайтах

Отпишу защиту от автоспама, сделана и работает на IPB 1.3.

 

В корень кидается файл parser.js следующего содержания:

var spam_key='[spam_key]';
spam_keyc=spam_key.split('[').join('[\/');

function rebuild_message(){
document.REPLIER.Post.value = document.REPLIER.Post.value.split(spam_key).join('').split(spam_keyc).join('');
}

function verify_URLa(){
rebuild_message();
document.REPLIER.Post.value = spam_key+' ' + document.REPLIER.Post.value + ' '+spam_keyc;
document.REPLIER.QPost.value = spam_key+' ' + document.REPLIER.Post.value + ' '+spam_keyc;
}

 

Файл прилинковывается к странице.

 

Отдельным файлом сделано на случай использования в форуме нескольких скинов, чтобы при необходимости сменить ключ можно было в одном месте.

 

 

В скинах ищутся кнопки отправки сообщений и предпросмотра, добавляется обработчик:

onclick="java script:verify_URLa()"

 

Там же в скинах ищутся все теги <textarea ... >, и в них добавляется обработчик

onfocus="java script:rebuild_message()"

 

 

В парсере две добавки:

 

в разделе

// Start off with the easy stuff

добавляется код:

//Антиробот
$txt = preg_replace( "#\[spam_key\](.+?)\[/spam_key\]#is", "<span class=veryfedkey>\\1</span>", $txt );
$txt = preg_replace( "#\[spam_key\](.+?)\[/spam_key\]#is", "\\1", $txt );
$txt = preg_replace( "#\[spam_key\](.+?)\[/spam_key\]#is", "\\1", $txt );
$txt = preg_replace( "#\[spam_key\](.+?)\[/spam_key\]#is", "\\1", $txt );
$txt = preg_replace( "#\[spam_key\](.+?)\[/spam_key\]#is", "\\1", $txt );
$txt_body = preg_replace( "#<span class=veryfedkey>(.+?)</span>#is", "\\1", $txt );
if($txt_body==$txt){$txt=";);););););););););););););););););););););););););););););););););););););););););););););););););)";};
$txt = preg_replace( "#\&lt\;span class=veryfedkey\&gt\;(.+?)\&lt\;/span\&gt\;#is", "\\1", $txt );

 

В функцию

unconvert($txt="", $code=1, $html=0) {

добавляются строки:

$txt = preg_replace( "#(<span class=veryfedkey>)(.+?)(</span>)#is", "\\2", $txt );
$txt = preg_replace( "#(<span class=veryfedkey>)(.+?)(</span>)#is", "\\2", $txt );

 

В админцентре выставить максимальное число смайликов в сообщении меньше 50.

 

После этого останется подчистить два глюка:

 

1. Подписи в ПМ лучше отключить (найти в скинах и закомментировать).

2. Все ранее попавшие в БД персональные сообщения перестанут отображаться, вместо них будет выводиться 50 смайликов.

Отображение сообщений можно восстановить, отредактировав в БД, добавив в начало ячейки каждого ПМ-сообщения "[spam_key][/spam_key]".

 

 

Я не большой спец в php, поэтому не смог вынести ключ в глобальную переменную, как это сделал в джаве.

Если кто-нибудь упростит парсер - буду признателен.

Ссылка на комментарий
Поделиться на других сайтах

//-----------------------------------------

// Do we have a valid post?

//-----------------------------------------

После вставляем:

 

$msg = "Spamer: ". $this->ipsclass->member['name']. "<br>Title: ".$this->ipsclass->input['TopicTitle']."<br>Message:<br>".$_POST['Post']."<br><hr>"Данное сообщение не было опубликовано ввиду подозрения на СПАМ";

 

В этой строчке помоему лищняя кавычка после последнего <hr>"Данное

Эта кавычка не нужна (вызывает ошибку, да и нечетное их количество вообще...

Ссылка на комментарий
Поделиться на других сайтах

В этой строчке помоему лишняя кавычка после последнего <hr>"Данное

Эта кавычка не нужна (вызывает ошибку, да и нечетное их количество вообще...

Лишняя :D Видимо, ошибся, когда через буфер копировал и чего-то скорректировал ;) У меня в коде кавычки нет :)

Ссылка на комментарий
Поделиться на других сайтах

ГМ.. как я такую темку интересную пропустил..

 

Fat_Cat как-то ты сложно.

Навскидку я бы сделал так:

в форму отправки ответа (блага она в одном месте формируется) я добавил бы hidden поле со значением 0 по умолчанию.

На onclick я вызываю ява-скрипт, который устанавливает там единичку.

На тот момент ещё форма не активируется, т.к. там стоит ещё экшен на проверку длины поста.

Когда он уже срабатывает в форме уже будет единичка.

Далее форма отправляется на сервер, а там простой контроль на это hidden поле.

Ссылка на комментарий
Поделиться на других сайтах

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.