Bonjour à tous !
Voilà cela fait maintenant une semaine que mon site ce fait spammer (la nuit) de tout et de rien sur l'espace dédié au commentaire des news.
J'ai alors refait entièrement le codage du système en le sécurisant parce que avant ils arrivaient à exécuter des scripts.
Mais ce matin ça à encore recommencer, j'avais une vingtaine de commentaire concernant le ... viagra T.T.

Comment puis-je remédier à ce problème ? J'avais pensé à un captcha mais est-ce vraiment utile ?

Merci par avance, ZiOu !

8 réponses


Grafikart
Réponse acceptée

Perso je te conseille Akismet : http://www.grafikart.fr/tutoriels/filtrer-spam-akismet-97
Sinon captcha oui mais c'est relativement pénible pour les utilisateurs.

marrtin
Auteur
Réponse acceptée

Alors avec le exit($spam); sa me retourne la page de news mais no style ^^"

Tu peux créer un système d'anti-flood si ça flood

marrtin
Auteur

@Grafikart : Ah est bien Akismet me plaît beaucoup !
Je ne connaissais pas et je suis même passé à travers sur le site car je ne l'avais pas vu. Je vais donc l'essayer mais d'après ce que tu dit il à l'air assez efficace.

@PhiSyx : Non c'est pas spécialement du flood c'est simplement du spam dans les commentaires genre sur 3 ou 4 news il va envoyer un ou deux commentaires ridicule.

marrtin
Auteur

@Grafikart :

Alors j'ai essayé Akismet en suivant ton tutoriel mais dans ma BDD mon champ "SPAM" ne passe pas à 1 quand je fait des essais.
Voici mon code à tous hasard :

<?php
require_once('config.php');
require_once('Akismet.class.php');

if(!empty($_POST))
{ 
  extract($_POST);
  $valid = true;

  if(empty($pseudo))
  {
    $valid = false;
    $erreurpseudo = 'Pseudo obligatoire !';
  }

  if(!empty($pseudo) && strlen($pseudo)<3)
  {
    $valid = false;
    $erreurpseudo = '3 caractères minimum !';
  }

  if(!empty($mail) && filter_var($mail, FILTER_VALIDATE_EMAIL) === false)
  {
    $valid = false;
    $erreurmail = 'Adresse e-mail invalide !';
  }

  if(empty($contenu))
  {
    $valid = false;
    $erreurcontenu = 'Renseignez votre commentaire !';
  }

  if(!empty($contenu) && strlen($contenu)<15)
  {
    $valid = false;
    $erreurcontenu = '15 caractères minimum !';
  }
  if($valid)
  {
    $pseudo = strip_tags($pseudo);
    $mail = strip_tags($mail);
    $contenu = strip_tags($contenu);

    $akismet = new Akismet();
    $akismet->setCommentAuthor($pseudo);
    $akismet->setCommentAuthorEmail($mail);
    $akismet->setCommentContent($contenu);
    $akismet->setPermalink('http://www....fr/');
    if($akismet->isCommentSpam()){
    $spam=1;
    }
    else{
    $spam=0;
    }

    $req2 = $bdd->prepare('INSERT INTO comment (pseudo,mail,contenu,news_id,spam) VALUES (:pseudo,:mail,:contenu,:news_id,:spam)');
    $req2->execute(array(
      'pseudo'=>$pseudo,
      'mail'=>$mail,
      'contenu'=>$contenu,
      'spam'=>$spam,
      'news_id'=>$news_id
    ));
    $req2->closeCursor();

    unset($pseudo);
    unset($mail);
    unset($contenu);
    unset($news_id);
  }
}
?>
marrtin
Auteur

Snif ! Petit Up! Je tourne en rond je trouve pas pourquoi ça ne fonctionne pas ^^"

Hello, les autres informations (pseudo,mail..) sont-ils ajouté correctement?
exit($spam); avant ta requête, ça retourne quel chiffre??

marrtin
Auteur

Oui toutes les autres informations sont ajoutés correctement.
Je test le exit($spam) ^^.