Skocz do zawartości

antispam


sebcio80

Rekomendowane odpowiedzi

mam malutki problem

otoz na mojej stronie mam mozliwosc dodawania komentarzy, problem polega na tym ze jakies robociki coraz wiecej spamuja i dodaja niechciany przeze mnie tekst

sam malo sie znam na php i mialbym prosbe czy ktos nie pomogl by mi w przerobieniu skryptu dodawania komentarzy?

chodziloby o to aby skrypt "rozpoznawał" czy w tekscie sa ciagi znakow (bez wzgledu na wielkosc liter):

<a

[a

[url

jezeli tak to nie dodawal by komentarza i zwracal komunikat: cos jak jest w anti-flood

tak wyglada kod dodawania komentarza (mam nadzieje ze caly):

//------------------------------------------------------  comment registeration
if ( isset( $_POST['content'] ) && !empty($_POST['content']) )
{
 $register_comment = true;
 $author = !empty($_POST['author'])?$_POST['author']:$lang['guest'];
 // if a guest try to use the name of an already existing user, he must be
 // rejected
 if ( $author != $user['username'] )
 {
$query = 'SELECT COUNT(*) AS user_exists';
$query.= ' FROM '.USERS_TABLE;
$query.= " WHERE username = '".$author."'";
$query.= ';';
$row = mysql_fetch_array( pwg_query( $query ) );
if ( $row['user_exists'] == 1 )
{
  $template->assign_block_vars(
	'information',
	array('INFORMATION'=>$lang['comment_user_exists']));
  $register_comment = false;
}
 }

 if ( $register_comment )
 {
// anti-flood system
$reference_date = time() - $conf['anti-flood_time'];
$query = 'SELECT id FROM '.COMMENTS_TABLE;
$query.= ' WHERE date > FROM_UNIXTIME('.$reference_date.')';
$query.= " AND author = '".$author."'";
$query.= ';';
if ( mysql_num_rows( pwg_query( $query ) ) == 0
	 or $conf['anti-flood_time'] == 0 )
{
  $query = 'INSERT INTO '.COMMENTS_TABLE;
  $query.= ' (author,date,image_id,content,validated) VALUES (';
  $query.= "'".$author."'";
  $query.= ',NOW(),'.$_GET['image_id'];
  $query.= ",'".htmlspecialchars( $_POST['content'], ENT_QUOTES)."'";
  if ( !$conf['comments_validation'] or $user['status'] == 'admin' )
  {		
	$query.= ",'true'";
  }
  else
  {
	$query.= ",'false'";
  }
  $query.= ');';
  pwg_query( $query );
  // information message
  $message = $lang['comment_added'];
  if ( $conf['comments_validation'] and $user['status'] != 'admin' )
  {
	$message.= '<br />'.$lang['comment_to_validate'];
  }
  $template->assign_block_vars('information',
							   array('INFORMATION'=>$message));
  // notification to the administrators
  if ( $conf['mail_notification'] )
  {
	// find any related category (can be unreachable to this admin)
	$category = $related_categories[0];
	// locally, we change the $conf['level_separator']
	$conf_separator = $conf['level_separator'];
	$conf['level_separator'] = ' > ';
	$cat_name = get_cat_display_name_cache($category['uppercats'],
										   '',
										   false);
	$conf['level_separator'] = $conf_separator;

	$cat_name = strip_tags( $cat_name );
	notify( 'comment', $cat_name.' > '.$picture['current']['name']);
  }
}
else
{
  // information message
  $template->assign_block_vars(
	'information',
	array('INFORMATION'=>$lang['comment_anti-flood']));
}
 }
}

Odnośnik do komentarza
Udostępnij na innych stronach

Proponuje na początek najprostszą metode. Dodaj jedno pole formularza, niewidoczne dla zwykłego użytkownika (w css je ukryj). Nadaj temu polu jakiś zachęcający tytuł (np email, url badz www). I teraz w PHP dopisz linijke sprawdzającą czy to pole jest puste. Jeśli tak to dodaj do bazy, jeśli nie to znaczy ze robot to dodał.

Zwykły użytkownik nie widzi tego pola i nic tam nie ma prawa wpisać, robot będzie widział i na pewno to pole wypełni.

Jak to nie da rady, to dodaj captche.

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz dodać pole przepisania tekstu z obrazka.

Jako że niektóre roboty już rozpoznają tekst - na obrazku wyświetlić 2 wyrazy w różnych kolorach:

np czarny i czerwony oraz napisać żeby user przepisał tylko czerwony wyraz.

Ja zastosowałem to u siebie i jeszcze ani jeden robot tego nie przeszedł a prób dziennie mam kilkadziesiąt.

pozdrawiam

każda porażka jest nawozem sukcesu

Odnośnik do komentarza
Udostępnij na innych stronach

poradzilem sobie sam i zrobilem to tak jak chcialem ;-)

wystarczylo przed tym kodem co wyzej wprowadzic banalnie proste porownanie ciagow, czyli taki prosty kodzik:

if ( stristr($content, '<a')  ||  stristr($content, '[url') )
{
 $template->assign_block_vars(
 'information',
 array('INFORMATION'=>$lang['comment_anti-spam']));
}
else
{

dziala bardzo ladnie

myslale jeszcze zeby jak ktos probuje spamowac to po probie dodania tekstu przekierowywac go na jakas inna strone ale doszedlem do wniosku ze moze czasami jakis zwykly user bedzie chcial dodac niewinnego linka wiec warto zrobic informacje ze tagow uzywac nie mozna

teraz jeszcze musze wprowadzic zamiane brzydkich slow na gwiazdki lub alernatywne ladniejsze slowa i bedzie git ;-)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności