IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Anti-spam sans captchca


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Par défaut Anti-spam sans captchca
    Bonjour,

    Avant tout je ne connais pas la version du php utilisé dans le script de mon annuaire.

    En effet, sur mon site internet j'ai inséré le script d'annuaire de catégorizator qui n'est plus mis à jour.

    Je suis débutante en php et ne parviens pas à insérer l'anti-spam "champ caché" que j'ai trouvé ici :
    http://neosting.net/aide-tutoriel/un...-artifice.html.

    Dans mon annuaire j'ai une page "submit_site.php de 328 lignes et de nombreux codes. Voici comment j'ai "inséré" le script :

    Dans mon formulaire html le champ "pays" (ligne 34) est mon champ caché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <form action="submit_site.php" method="post" name="form2submit">
    		<input type="hidden" name="action" value="submit">
    		<?php
    		if (empty($id_cat))
    		{
    			//connexion a la BD
    			$lk = connection_BD();
    			//affichage de la liste des categories
    			echo "<center>".show_list_cats("id_cat","",true)."</center>";
    		}
    		else
    		{
    			?>
    			<input type="hidden" name="id_cat" value="<?php echo $id_cat; ?>">
    			Catégorie : <?php echo htmlspecialchars($cat_name); ?>
    			<?php
    		} //fin du else
    		//fin de la connexion
    		mysql_close($lk);
    		?>
    		<br><br>
    		Votre nom :
    		<input type="text" name="nom_proprio" maxlength=50 size=30 class="field_data_add_site_annuaire">
    		<br>
    		Votre adresse email : 
    		<input type="text" name="email_proprio" maxlength=75 size=40  class="field_data_add_site_annuaire">
    		<br>
    		Titre du site : 
    		<input type="text" name="titre" maxlength=50 size=30 class="field_data_add_site_annuaire">
    		<br>
    		Url du site : 
    		<input type="url" name="url" maxlength=150 size=50 value="http://" class="field_data_add_site_annuaire">
                    <br> 
    		<input type="text" name="pays" maxlength=50 size=30 class="couleur_pays">
    		<br><br>
    		Description du site :
    		<br>
    		<textarea name="description" cols=50 rows=5 class="descr_add_site_annuaire"></textarea>
    		<br><br>
    		<?php
    		if ($use_newsletter && $func_mail_ok) //il faut pouvoir recevoir un mail via la fonction mail()
    		{
    			?>
    			Voulez-vous recevoir notre Newsletter ?
    			<input type="checkbox" name="add2newsletter" value=1>
    			<br><br><br>
    			<?php
    		} //fin du if
    		?>
    		<center>
    		<input type="submit" value="Soumettre le site" onClick="return check_id_cat()" class="submit_form_add_site_annuaire">
    		</center>
    		</form>
    Pour ce qui est de l'analyse du formulaire en php(ligne 9) j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    <?php $action = isset($_POST['action']) ? $_POST['action'] : '';
    if ($action == "submit")
    {
    	// recuperation des donnees
    	$nom_proprio = isset($_POST['nom_proprio']) ? $_POST['nom_proprio'] : '';
    	$email_proprio = isset($_POST['email_proprio']) ? $_POST['email_proprio'] : '';
    	$titre = isset($_POST['titre']) ? $_POST['titre'] : '';
    	$url = isset($_POST['url']) ? $_POST['url'] : '';
    	if(isset($_POST["pays"]) && $_POST["pays"] == '')
    	{
    	//ok
    	}
    	$description = isset($_POST['description']) ? $_POST['description'] : '';
    	$add2newsletter = isset($_POST['add2newsletter']) ? (int)$_POST['add2newsletter'] : 0;
    	//verification de tous les champs (on ne quitte pas sechement l'execution en cas d'erreur...)
    	est_vide($nom_proprio,"Vous n'avez pas rempli votre nom !",true);
    	email_valide($email_proprio,true);
    	est_vide($titre,"Vous n'avez pas rempli le titre du site !",true);
    	url_valide($url,true);
    	est_vide($description,"Vous n'avez pas rempli la description du site !",true);
    	est_trop_long($description,255,"Votre description",true);
     
    	//connexion a la BD (va etre utile pour verifier la presence de l'url et avant ca aller chercher les infos de l'admin)
    	//on est deja connecte
    	//creation de la requete d'administration
    	$sql_admin = "SELECT max_presence, auto_validate, email_master, titre_site, url_rep FROM $T_infos ";
    	//envoi de la requete
    	$res_admin = send_sql($sql_admin,"trouver les infos pour l'ajout du site");
     
    	$result_admin = mysql_fetch_array($res_admin);
    	$auto_validate = $result_admin["auto_validate"];
    	$email_master = $result_admin["email_master"];
    	$titre_site = $result_admin["titre_site"];
    	$url_rep = $result_admin["url_rep"];
    	$max_presence = $result_admin["max_presence"];
     
    	//on cherche si l'url n'est pas deja presente dans les tables (la fonction exit si probleme)
    	if (cherche_presence_url($url,$id_cat,$max_presence))
    	{
    		?>
    		<br><br>
    		<a href="index.php">Retour à l'annuaire</a>
    		<?php
    		include("after.php");
    		exit;
    	}
     
    	if (!get_magic_quotes_gpc())
    	//on rajoute des slash pour les magic_quote en OFF
    	{
    		$nom_proprio = addslashes($nom_proprio);
    		$titre = addslashes($titre);
    		$description = addslashes($description);
    	}
    	//on enleve les caracteres speciaux et les balises html
    	$nom_proprio = $nom_proprio;
    	$titre = $titre;
    	$description = $description;
     
    	//si tous les champs sont biens remplis
    	//on peut ajouter le site dans la table des sites en attente de validation
     
    	//creation des requetes
    	if ($auto_validate)
    	//directement accepte et donc dans la table des sites
    	{ $sql = "INSERT INTO $T_sites (id_cat,titre,description,url,nom_proprio,email_proprio,date_validation) VALUES ('$id_cat','$titre','$description','$url','$nom_proprio','$email_proprio',CURRENT_DATE) "; }
    	else //dans la table des sites en attente
    	{ $sql = "INSERT INTO $T_sites_in_wait (id_cat,titre,description,url,nom_proprio,email_proprio,date_soumission) VALUES ('$id_cat','$titre','$description','$url','$nom_proprio','$email_proprio',CURRENT_DATE) "; }
    	$sql_cat_name = "SELECT cat_name FROM $T_categories WHERE id = '$id_cat' ";
    	//envoi des requetes
    	$ins = send_sql($sql,"soumettre un site !");
    	$res_cat_name = send_sql($sql_cat_name,"trouver le nom de la catégorie");
    	//fin de la connexion
    	mysql_close($lk);
     
    	$resultat_cat_name = mysql_fetch_array($res_cat_name,MYSQL_ASSOC);
     
    	//message de confirmation au visiteur et au webmaster
    	?>
    	<br><br><br>
    	<span class="confirm_add_site_annuaire">
    	<?php
    	if($func_mail_ok)
    	//si on sait envoyer des mails
    	{
    		//creation des messages
    		if ($auto_validate)
    		{
    			$message_vis = "Le site $url que vous venez de proposer a été ajouté dans l'annuaire de $titre_site.\n\n";
    			$message_master = "Le site $titre vient d'être proposé et ajouté dans votre annuaire dans la catégorie $resultat_cat_name[cat_name].\n";
    			$message_master .= "Vous pouvez le voir en visitant la catégorie à cette adresse :\n";
    			$message_master .= "$url_rep/index.php?cat_id=$id_cat\n\n";
    		}
    		else //l'administrateur doit valider le site 
    		{
    			$nom_categorie = $resultat_cat_name["cat_name"];
    			//creation message
    			$message_vis = "Vous venez de proposer le site : $url dans l'annuaire de $titre_site.\n\n";
    			$message_vis .= "Une fois que le webmaster aura visité votre site, vous recevrez un email si votre site est accepté.\n";
    			$message_master = "Le site : $url vient d'être proposé dans l'annuaire dans la catégorie $nom_categorie."; 
    		}
    		//envoi du message au visiteur
    		send_mail($email_proprio,"Proposition de site dans l'annuaire de $titre_site",htmlspecialchars($message_vis),$email_master);
    		//envoi du message eu webmaster pour le prevenir de la proposition/ajout de site
    		send_mail($email_master,"Nouveau site proposé dans l'annuaire",htmlspecialchars($message_master),$email_master);
     
    		if ($auto_validate)
    		{
    			?>
    			Le site qui vient d'être proposé a été automatiquement accepté et donc ajouté dans la catégorie souhaitée
    			<br><br>
    			<?php
    		}
    		else //le site a ete mis en attente
    		{
    			?>
    			Le site <?php echo htmlspecialchars($url); ?> vient d'être proposé dans l'annuaire de <?php echo htmlspecialchars($titre_site); ?>.
    			<br><br>
    			Vous recevrez un mail si après visite de votre site le webmaster accepte de l'ajouter dans l'annuaire!
    			<?php
    		}
    		//message au webmaster si le visiteur s'est inscrit a la Newsletter
    		if ($add2newsletter != 0)
    			send_mail($email_master,"Inscription à la Newsletter","$email_proprio souhaite recevoir la Newsletter",$email_master);		
    	}
    	else //on ne sait pas envoyer de mail
    	{
    		if ($auto_validate)
    		{
    			?>
    			Le site qui vient d'être proposé a été automatiquement accepté et donc ajouté dans la catégorie souhaitée !
    			<?php
    		}
    		else //le site doit etre valide par le webmaster
    		{
    			?>
    			Le webmaster va visiter votre site et décidera de l'ajouter ou non...
    			<br><br>
    			Revenez voir dans 3 ou 4 jours pour voir si votre site a été accepté !
    			<?php
    		}
    	}
    	?>
    	</span>
    	<br><br>
    	<a href="index.php">Retour à l'annuaire</a>
    	<?php
    }
    Dans mon fichier CSS j'ai bien mis :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .couleur_pays{
    	display: none; 
    }

    Mais cela ne fonctionne pas.

    Pouvez-vous m'aider car depuis un mois les spam ont trouvé mon formulaire "sympa" bien que les site soient vérifiés avant validation.

    Je vous remercie par avance.

    Verso49

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tui peux simplement mettre au début de ton script de contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($_POST['pays'])) {  exit(); }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Par défaut
    Bonjour,

    Merci pour la suggestion, je viens donc de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($_POST['pays'])) {  exit(); }
    avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $action = isset($_POST['action']) ? $_POST['action'] : '';
    if ($action == "submit")
    {
    et j'ai supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_POST["pays"]) && $_POST["pays"] == '')
    	{
    	//ok
    	}
    je reviens vous dire si cela fonctionne.

    Verso49

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Par défaut
    Bon cela ne fonctionne pas, plus de 80 inscriptions depuis ce matin.

    Avant les spams une dizaine d'inscriptions par semaine.

    Merci quand même.

    D'autres idées ?

    Verso49

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Par défaut


    Hé bien si cela fonctionne ! En fait j'ai gardé la proposition de Sabotage et j'ai mis des balises "label" dans mon formulaire HTML en ajoutant '*' qui rend obligatoire le remplissage des champs.

    Du coup de 200 à 400 spams jours je n'ai eu qu'une inscription (réelle et validée) aujourd'hui.

    Merci beaucoup Sabotage

    Verso49

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Anti spam
    Par wodel dans le forum Réseau
    Réponses: 1
    Dernier message: 27/11/2005, 12h43
  2. [Sécurité] Anti spam
    Par mic79 dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2005, 14h49
  3. Anti Spam sous RedHat
    Par TuxP dans le forum Réseau
    Réponses: 3
    Dernier message: 03/02/2004, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo