Protéger un formulaire - spam, flood

Eléphanteau du PHP | 10 Messages

08 août 2013, 00:32

Salut, je suis un noob... j'ai tout de meme essayé de sécuriser mon formulaire mais il a un un probleme, aidez moi s'il vous plait !!

Alors je souhaite empecher les utilisateur d'envoyer plein de fois le formulaire, jai donc utiliser SESSION et COOKIE.

Quand le message est envoyé, j'ajoute 1 à la variable "contact" et au bout de 3 fois, le cookie "stop" est créé et s'il existe, il redirige vers la page d'erreur.

Mon problème actuel est que :
au debut tout va bien, ca affiche "3" mais de suite apres, quand je passe à 2 envois restant et bien ca reste à 2 (quand je continue a en envoyer)...

je comprends pas dutout ce qui se passe...

merci bien

Voici mon code :
<?php
session_start();
if(isset($_COOKIE["reste"]))
{
if($_COOKIE["reste"]==0||$_COOKIE["reste"]<0)
{
setcookie("stop", 1, time()+300);
if(isset($_COOKIE["stop"])){
echo 'cookie OK';
exit('Quota atteint!');
}else{
echo 'erreur cookie';
}
setcookie("reste", 3, time()+300);
}
}
else
{
setcookie("reste", 3, time()+300);
}

    $ip = $_SERVER["REMOTE_ADDR"];
    $name = htmlentities($_POST['name']);
    $email = htmlentities($_POST['email']);
    $message = htmlentities($_POST['message']);
    $to = '[email protected]';
    $subject = 'MECRAFT';
    $human = htmlentities($_POST['human']);	
    $body = "Pseudo: $name\nEmail: $email\n\nMessage:\n $message\n\nip: $ip";
?>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="contact.css" />
<script src="/Ress/styles/script.js"></script>
<section>
<?php		
    if ($_POST['envoyer']) {
	sleep(1);
    if ($name != '' && $email != '') {
        if ($human == 'VERT') {				 
            if (mail ($to, $subject, $body)) {
?>

<p style="color:#00CC00;">
<?php
	        echo 'Ton message &agrave; &eacute;t&eacute; envoy&eacute;!';
			$_COOKIE["reste"] = $_COOKIE["reste"] - 1;
?>
</p>
<?php
	    } else { 
?>
<p style="color:#CC0000;">
<?php
	        echo 'Y\'a eu un probl&egrave;me! Ajoute le skype : staffto175'; 
?>
</p>
<?php
	    } 
	} else if ($_POST['envoyer'] && $human != 'VERT') {
?>
<p style="color:#CC0000;">
<?php
	    echo 'Tu as mal r&eacute;pondu &agrave; la question anti-spam!';
?>
</p>
<?php
	}
    } else {
?>
<p style="color:#CC0000;">
<?php
        echo 'Tu dois remplir tous les champs!!';
?>
</p>
<?php
    }
}
?>
<br>
Ton ip : <? echo $_SERVER["REMOTE_ADDR"]; ?><br>
Il te reste <? echo $_COOKIE["reste"]; ?> envois.<br>
<br>

<form method="post" action="contact.php" style="border-right:1px;">

    <label>Pseudo</label>
    <input name="name" placeholder="SwiftFallow">

    <label>Email</label>
    <input name="email" type="email" placeholder="[email protected]">

    <label>Message</label>
    <textarea name="message" placeholder="Message"  maxlength="500"></textarea>
    
	<label>Quelle couleur est issue du jaune m&eacute;lang&eacute; au bleu? (Anti-spam)</label>
    <input name="human" placeholder="&eacute;CRIVEZ EN MAJ" maxlength="4">
	
    <center><input type="image" name="envoyer" src="/Ress/imgs/boutons/valide.png" value="1" style="height:50;width:50;boder:none;"><center>

</form>

    </section>

Eléphant du PHP | 96 Messages

08 août 2013, 08:11

Slt, tu peux trouver sur internet des codes captcha à intégrer à ton formulaire.
Sinon tu peux faire tes propres codes mais ça risque de mettre plus de temps et ça sera sans doute moins sécurisé.
Tim.