Quand le blocage d'IP bloque un IP non bloqué

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Quand le blocage d'IP bloque un IP non bloqué

par Victor BRITO » 03 juin 2006, 17:17

Salut!

Suis-je bête! je me suis mêlé les pinceaux en confondant les variables. :oops:

Tout est rentré dans l'ordre.

par Ryle » 02 juin 2006, 12:27

Et où sont les "or die(mysql_error())" après tes mysql_query pour vérifier qu'il n'y a pas eu d'erreur sql lors de l'execution de la requête ? :)

Bon en fait non, y en a pas besoin, mais c'est pas une raison pour pas les mettre :
echo $requete_ip_insertion;
mysql_query($requete_ip_selection);

Quand le blocage d'IP bloque un IP non bloqué

par Victor BRITO » 02 juin 2006, 11:39

Salut à tous!

J'essaie de mettre au point un système permettant de bloquer l'IP après qu'un message a été envoyé, et ce pendant quelques minutes.

Pour cela, je crée une table dans la base de données.

Code : Tout sélectionner

CREATE TABLE `courriel` ( `id` int(11) NOT NULL auto_increment, `ip` text NOT NULL, `temps` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Ensuite, je code la page concernée par l'envoi de message et le blocage d'IP.
<?php 
session_start();
include ("sgbd/mysql.php");

// Paramètres du courriel
$destinataire='[email protected]';
$courriel=(!isset($_POST['courriel']))? '': $_POST['courriel'];
$courriel_confirmation=(!isset($_POST['courriel_confirmation']))? '': $_POST['courriel_confirmation'];
$objet=(!isset($_POST['objet']))? '': $_POST['objet'];
$saisie=(!isset($_POST['saisie']))? '': $_POST['saisie'];
$cle_primaire=(!isset($_POST['cle_primaire']))? '': $_POST['cle_primaire'];
$message=(!isset($_POST['message']))? '': $_POST['message'];
$en_tete='From: '.$courriel.'\nReply-to: '.$courriel.'\n';
$en_tete=str_replace('\r\n', '\n', $en_tete);

// Paramètres de l'IP
$requete_ip_selection="SELECT id, ip, temps FROM courriel WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$resultat_ip_selection=mysql_query($requete_ip_selection);
$donnees_ip_selection=mysql_fetch_array($resultat_ip_selection);
$temps_blocage=time()-$donnees_ip_selection['temps'];
if (mysql_num_rows($resultat_ip_selection)!=0 && $temps_blocage>=120){
	$requete_ip_selection="DELETE FROM courriel WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
	$resultat_ip_selection=mysql_query($requete_ip_selection);
}

// Envoi du courriel et blocage de l'IP
if (isset($_POST['courriel']) && isset($_POST['courriel_confirmation']) && isset($_POST['message']) && isset($_POST['saisie']) && !empty($courriel) && !empty($courriel_confirmation) && !empty($message) && !empty($saisie) && $saisie==$_SESSION['confirmation_visuelle'] && $courriel_confirmation==$courriel){
	if ($resultat_ip_selection && $temps_blocage<120){
		$avis='Vous ne pouvez pas envoyer un nouveau message en si peu de temps. Cliquez <a href="contact.php" title="Contact">ici</a> pour retourner au formulaire.';
	}
	else{
		mail($destinataire, htmlentities($objet), stripslashes(htmlentities($message)), $en_tete);
		$avis='Votre message a bien &eacute;t&eacute; envoy&eacute;. Cliquez <a href="index.php" title="Contact">ici</a> pour revenir &agrave; l&rsquo;accueil.';
		$requete_ip_insertion="INSERT INTO courriel (ip, temps) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".time()."')";
		echo $requete_ip_insertion;
		mysql_query($requete_ip_selection);
		if (mysql_insert_id()==0) $avis='Votre message n&rsquo;a pas pu &ecirc;tre envoy&eacute;. Cliquez <a href="index.php" title="Contact">ici</a> pour revenir &agrave; l&rsquo;accueil.';
		else{
			$cle_primaire=mysql_insert_id();
			echo $cle_primaire;
		}
	}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="imagetoolbar" content="no"
<title>Contact</title>
<link href="css/styles.css" rel="stylesheet" type="text/css">
<link href="css/corps.css" rel="stylesheet" type="text/css">
</head>

<body>
<div id="page">
  <div id="corps">
    <h1>CONTACT</h1>
<?php 
if (!isset($_POST['courriel']) || empty($courriel) || !isset($_POST['courriel_confirmation']) || empty($courriel_confirmation) || $courriel_confirmation!=$courriel || !isset($_POST['message']) || empty($message) || !isset($_POST['saisie']) || empty($saisie) || $saisie!=$_SESSION['confirmation_visuelle']){
	// Afficher le formulaire
?>
    <p>Pour &eacute;crire au webmestre, veuillez remplir le formulaire ci-dessous. Les champs accompagn&eacute;s d&rsquo;un * sont obligatoires.</p>
    <form action="contact.php" method="post" name="contact" id="contact">
      Votre adresse &eacute;lectronique*&nbsp;:<br>
      <input name="courriel" type="text" id="courriel" size="70" value="<?php echo $courriel ?>"><br>
      Confirmez votre adresse &eacute;lectronique*&nbsp;:<br>
      <input name="courriel_confirmation" type="text" id="courriel_confirmation" size="70"><br>
      Objet de votre message&nbsp;:<br>
      <input name="objet" type="text" id="objet" size="70" value="<?php echo $objet ?>"><br>
      Votre message*&nbsp;:<br>
      <textarea name="message" cols="60" rows="6" id="message"><?php echo $message ?></textarea><br>
      Veuillez saisir les caract&egrave;res apparaissant ci-dessous*.<br>
      <img src="confirmation-visuelle.php" alt="Confimation visuelle" title="Confirmation visuelle"><br>
      <input name="saisie" type="text" id="saisie"><br>
      <input name="cle_primaire" type="hidden" id="cle_primaire" value="<?php if (mysql_num_rows($resultat_ip_selection)!=0) echo $donnees_ip_selection['id']; else echo 1; ?>">
      <input name="annul" type="reset" id="annul" value="Annuler" onClick="window.location.href='index.php'">
      <input name="envoi" type="submit" id="envoi" value="Envoyer">
    </form>
    <div id="revenir"><a href="#"><img src="images/haut_page.gif" alt="Revenir en haut de la page" title="Revenir en haut de la page"></a></div>
<?php 
}
else{
?>
    <p><?php echo $avis ?></p>
<?php 
}
?>
  </div>
</div>
</body>
</html>
Or, quand j'essaie la page et que je remplis en bonne et due forme le formulaire, lorsque je le valide, je tombe toujours sur le message "Votre message n'a pas pu être envoyé". :( Soit dit en passant, echo $requete_ip_insertion affiche bien la requête et la connexion à la base de données s'établit. Et, quand je vérifie la table, elle ne se remplit pas de la requête d'insertion.