Ma classe antispam est-elle suffisante ?

Mammouth du PHP | 531 Messages

24 avr. 2009, 16:26

Bonjour,

Je me suis fait une petite classe antispam very light, super simple et j'aurais voulu savoir si elle était suffisante et un minimum efficace.

Pour son utilisation voilà ce qui se passe...

A l'initialisation du formulaire :
new antispam
antispam->generer
antispam->getQuestion pour afficher la question dans le label
antispam->getReponse pour stoker la réponse dans un input hidden

A l'envoi :
new antispam
antispam->verifier($POST reponseUser, $POST reponse)

<?php
class antispam{
	private $question;
    private $reponse;
    private $reponseUser;
    
	private function setReponseUser($value){
		$this->reponseUser = md5($value);
	}
    public function getQuestion(){
    	return $this->question;
    }
    public function getReponse(){
    	return $this->reponse;
    }
	
	public function generer(){
    	$nb1 = rand(1,5);
        $nb2 = rand(1,5);
        $this->question = $nb1.' et '.$nb2.' ?';
		$this->reponse = md5($nb1+$nb2);
    }
	public function verifier($reponseUser, $reponse){
		// $reponseUser & reponse from $_POST
		$this->setReponseUser($reponseUser);
		$this->reponse = $reponse;
		if($this->reponseUser != $this->reponse){
			throw new Exception('Antispam : mauvaise réponse !');
		}
	}
}
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 avr. 2009, 17:16

antispam->getQuestion pour afficher la question dans le label
antispam->getReponse pour stoker la réponse dans un input hidden
:D
Si tu mets en clair la réponse dans le code source de la page où tu poses la question, c'est comme si tu mettais la clé de chez toi sous ton paillasson!
Quand tout le reste a échoué, lisez le mode d'emploi...

Invité
Invité n'ayant pas de compte PHPfrance

24 avr. 2009, 17:19

Non il ya un md5 sur la réponse avant de l'afficher : $this->reponse = md5($nb1+$nb2);

A moins que tu ne parle d'autre chose.. ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 avr. 2009, 18:56

La réponse ne doit pas passer en GET/POST/COOKIE mais doit rester uniquement sur le serveur. Utilise des sessions ou des fichiers texte côté serveur pour la stocker temporairement.

Par ailleurs, proposer une addition de 2 chiffres entre 1 et 5 ne peut donner qu'un résultat compris entre 1 et 10 et donc la protection est assez faible (si je veux te spammer, j'ai une chance sur 10 que mon message passe, donc il suffit que je tente ma chance plusieurs fois ;) )
Quand tout le reste a échoué, lisez le mode d'emploi...

D4Y
Eléphant du PHP | 52 Messages

24 avr. 2009, 21:56

As-tu pensé au kaptcha?