Vérification anti spam

Eléphant du PHP | 233 Messages

02 févr. 2014, 12:57

Bonjour,
j'ai mon code qui ne fonctionne pas : le résultat de la multiplication est toujours fausse.
Pourtant mon code à l'air correct.
A votre avis ?
Merci de votre aide...
<?php 
$res_conf_username=mysql_query("SELECT email, pseudo FROM membres WHERE email='".$_POST['email']."' ");
				
				if ((@$_POST['EmailPassword']=="Soumettre") and ($_POST['email']!="") and ($_POST['verification']==$_POST['verifresult']) and (mysql_num_rows($res_conf_username)!=0) )
					{
					$newpassword="".rand(100000, 999999);
					
					$res_update_password=mysql_query("UPDATE membres SET mot_passe='".md5($newpassword)."' WHERE email='".$_POST['email']."'");
					
					$list_conf_username=mysql_fetch_row($res_conf_username);
					
					echo "<div class='alert alert-success'>Vous allez recevoir un email avec le nouveau mot de passe associé au nom d'utilisateur et au site web entrés. Vous pourrez changer ce nouveau mot de passe plus tard via votre compte personnel.</div>";
							
					mail("".$_POST['email']."","Votre mot de passe espace membres","Bonjour $list_conf_username[1],\n\nLe nouveau mot de passe sur notre site espace membres suivant : $newpassword\n\nVous pourrez changer ce nouveau mot de passe plus tard via votre compte personnel.\n\nMerci d'utiliser notre espace membres !\n\nhttp://www....","From: Espace membres <[email protected]>\r\n");	
					}
				else {
					if ((@$_POST['EmailPassword']=="Soumettre") and (mysql_num_rows($res_conf_username)==0)) echo "<div class='alert alert-error'>Désolé, cette adresse email n'est pas présente dans notre base de données</div>";
					if ((@$_POST['EmailPassword']=="Soumettre") and ($_POST['verification']!=$_POST['verifresult'])) echo "<div class='alert alert-error'>Désolé, le résultat de l'opération n'est pas le bon, merci d'essayer à nouveau</div>";
					}
			
				?>
le formulaire :
<html><div id="connect"><br />

				<form method="post" action="">
					
					<label class="control-label">Votre adresse email :</label>
					<input type="text" name="email" placeholder="Email" /><p><br>	
					<label class="control-label">Vérification</label>
					
					<?php
					$val1=rand(1, 10);
					$val2=rand(1, 10);
					$verifresult=$val1*$val2;
					?>
					<input type="text" name="verification" placeholder="<?PHP echo "$val1 x $val2 = "; ?>" /><input type="hidden" name="verifresult" value="<? echo $verifresult; ?>" />	
				
					<input type="submit" class="bnt-connect" name="EmailPassword" value="Soumettre" />
				  
				  </form>
				  <br>
</div><br></html>

ViPHP
ViPHP | 928 Messages

03 févr. 2014, 04:28

Là comme ça je ne vois pas d'erreur, mais c'est facilement débugable, il suffit d'afficher le contenu de votre $_POST pour voir s'il contient bien la variable attendue, par exemple en haut de votre fichier vous mettez
print_r($_POST);
et vous pouvez voir si les variables $_POST['verification'] et $_POST['verifresult'] contiennent ou non ce que vous attendez. Ca permettra d'en savoir plus.

Par contre c'est vraiment du code à l'ancienne, et vous avez déjà une énorme faille de sécurité là (une grosse injection SQL). Si quelqu'un rentre cette valeur dans le champ email :

Code : Tout sélectionner

' OR '' = '
il va changer d'un coup tous les mots de passe. C'est la faille la plus classique en PHP, donc n'importe quelle personne trifouillant un peu votre site trouvera ça en deux secondes. Vous devriez utiliser PDO et les requêtes préparées, qui protègent contre ce genre de faille, il y a énormément de tuto sur le web.

Eléphant du PHP | 233 Messages

03 févr. 2014, 17:09

Bonjour,

je ne suis pas fane de PDO mais j'ai fais une REGEX pour palier au problème. Pas de caractères spéciaux dans l'adresse mail.
Je mets le code en entier pour vois les modification apportées pour que le code fonctionne...
Cela peut servir à quelqu'un :
<?php 
if(isset($_POST['email']))
{
$email = htmlspecialchars($_POST['email']);

$res_conf_username=mysql_query('SELECT email, pseudo FROM membres WHERE email= "'.$_POST['email'].'"');

				
				if ($_POST['email']!="")
					{
					
					if ($_POST['verification']==$_POST['verifresult'])
 {
 if (preg_match("#[a-zA-Z0-9ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ\s]$#", $_POST['email']))
  					{
					if (mysql_num_rows($res_conf_username)!=0)
					
					{
					$newpassword="".rand(100000, 999999);
					
					$res_update_password=mysql_query('UPDATE membres SET mot_passe="'.md5($newpassword).'" WHERE email="'.$_POST['email'].'"');
					
					$list_conf_username=mysql_fetch_row($res_conf_username);
					
					echo "<div class='alert alert-success'>Vous allez recevoir un email avec le nouveau mot de passe associé au nom d'utilisateur et au site web entrés. Vous pourrez changer ce nouveau mot de passe plus tard via votre compte personnel.</div>";
							
					mail("".$_POST['email']."","Votre mot de passe espace membres","Bonjour $list_conf_username[1],\n\nLe nouveau mot de passe sur notre site espace membres suivant : $newpassword\n\nVous pourrez changer ce nouveau mot de passe plus tard via votre compte personnel.\n\nMerci d'utiliser notre espace membres !\n\nhttp://www....","From: Espace membres <[email protected]>\r\n");	
					}
				else {
				echo'<div class="alert alert-error">Aucune email correspondante dans notre base de données</div>';
				}
				}
				else
				{
				echo'<div class="alert alert-error">La multiplication est fausse, merci de recommencer !</div>';
				}
				}
				else
				{
				echo'<div class="alert alert-error">Email invalide : votre adresse email ne doit pas contenir de caractères spéciaux !</div>';
				}
				}
			else
			{
			echo '<div class="alert alert-error">Le champ email est obligatoire !</div>';
			}
				
				}
									
			
				?>