[Résolu] Pluxml blog : Lutte contre le spam

Mon site interviewOnline sous pluxml blog est victime de spam, nous sommes obligés de surveiller les commentaires.

Snifff c'est super chiant meme si je sais que pluxml blog est en béta.

Serait il possible de développer un truc qui permet d'éviter ce problème rapidement ?

genre entrer un clé de quelques lettres pour valider le commentaires ?

Merci

Réponses

  • Je pense un module qui demande un code de confirmation pour pouvoir poster son commentaire comme beaucoup de site le fond ( iVation, Art-Zen.... )
  • Aïe le spam est arrivé...
    Je comprend qu'il est urgent de faire quelque chose et je vais apporter une solution avec un système de vérification mais par contre je ne peux rien promettre au niveau du délai, malheureusement je manque de temps libre
  • J'ai trouvé ce code, qui permet d'éviter un vrai humain de poster pour ne rien dire, je le poste au cas où ça intéresse quelqu'un :
    <?php
    if ($_GET['debug'] == 1)
    {
    	if (moulinette_test($_GET['word']))
    		echo "<font color=green>valid sentence</font>";
    	else
    		echo "<font color=red>Unvalid sentence</font>";
    }
    
    function moulinette_test($word)
    {
    	return (moulette1($word) && moulette2($word));
    }
    
    function moulette2($word)
    {
    	/*
    	** If sentence that contains at least 3 words with multiple char repetitions
    	** KILL 
    	*/
    	
    	$len_word = strlen($word);
    	$grace = 6; // 3 allowed repetitions THEN KILL
    	$spaces = 3; // must contain more than 3 spaces
    	if ($len_word > 0)
    	{
    		for ($i = 1; $i < $len_word; $i++)
    			if ($word[$i - 1] == $word[$i])
    					$grace--;
    			elseif ($word[$i] == "%20" || $word[$i] == " ")
    					$spaces--;
    
    if ($_GET['debug'] == 1)
    {
    		echo "moulette2 for $word<br>";
    		echo "condition: grace > 0 && space < 0 <br>";
    		echo "grace: $grace<br>";
    		echo "spaces: $spaces<br><br>";
    }
    
    		if ($grace < 0 && $spaces > 0) // multiple repetitions in a (max) 3 words sentence
    				return (0);
    
    		return (1);
    	}
    	else
    		return (0); // word has 0 length
    }
    
    function moulette1($word)
    {
    	/*
    	** if there are more than 3 neightbourgh letters it is probably a test message
    	*/ 
    	$allowed_grace = 4; // Max allowed letters follow between two spaces
    	
    	/*
    	** Azerty configuration
    	*/
    	$keyboard = array();
    	
    	/*
    	** Azerty Lower case
    	*/
    	$keyboard[0] = "azertyuiop^$"; // first line
    	$keyboard[1] = "qsdfghjklmù*"; // second line
    	$keyboard[2] = "<wxcvbn,;:!"; // third line
    	
    	/*
    	** Azerty upper case
    	*/
    	$keyboard[3] = "AZERTYUIOP"; // first line
    	$keyboard[4] = "QSDFGHJKLM%µ"; // second line
    	$keyboard[5] = ">WXCVBN,;:!"; // third line
    	
    	$defined_keyboards = (count($keyboard) + 1) / 3;
    	$grace = $allowed_grace;
    	for (; $defined_keyboards > 0; $defined_keyboards--)
    		{
    			$word_length = strlen($word);
    			for ($i = 0; $i < $word_length && $grace > 0; $i++)
    				{
    					if ($word[$i] == " " || $word[$i] == "%20")
    						$grace = $allowed_grace;
    					/*
    					** Loop to find the position of the letter in the right keyboard
    					*/
    					$k = ($defined_keyboards * 3) - 1;
    					$mouchard = 3; // nb of keyboard lines
    					
    					while ($mouchard > 0)
    					{
    						$len_keyboard = strlen($keyboard[$k]);				
    						for ($j = 0; $j < $len_keyboard && $keyboard[$k][$j] != $word[$i]; $j++)
    							;
    						if ($keyboard[$k][$j] == $word[$i])
    							$mouchard = -1;
    						else
    							{
    								$mouchard--;
    								$k--;
    							}
    					}
    					/*
    					** We found the letter in one of the keyboards
    					** But we need to check if it isnt a "e" or e "r" beaceause they are used very often
    					** and if we include them in our test we should probably get an error !
    					*/
    					if ($mouchard == -1 && $word[$i] != "e" && $word[$i] != "r" && $word[$i] != "t")
    						{
    							// detection de la touche d'à côté directement
    							if ($keyboard[$k][$j + 1] == $word[$i + 1] || $keyboard[$k][$j - 1] == $word[$i + 1])
    								$grace--;
    							// detection de deux touches plus loin
    							if ($keyboard[$k][$j + 1] == $word[$i + 2] || $keyboard[$k][$j - 1] == $word[$i + 2])
    								$grace--;
    						}
    				}
    		}
    		
    		if ($_GET['debug'] == 1)
    		{
    			echo "<br>moulette 1 for: ".$word."<br>";
    			echo "condition is grace > 0<br>";
    			echo "grace is : $grace<br>";
    			if ($grace <= 0)
    				{
    					echo "matched error with: ".$word[$i - 2].$word[$i - 1].$word[$i]."<br>";
    				}
    			echo "<br><br>";
    		}
    	if ($grace > 0)
    		return (1);
    	else
    			return (0);
    }
    
    ?>
    
  • Pour information j'ai commencé le développement d'un système anti-spam simple (demande quelle est la Xème lettre du mot 'bidule').
    Je fais tous pour pouvoir le publier rapidement.
  • oui c'est mieu de faire ça...

    On pourat changer la question ?
  • Le système anti-spam est disponible : http://pluxml.org/forum/viewtopic.php?pid=2031#p2031
  • merci skyline
Connectez-vous ou Inscrivez-vous pour répondre.