Inscription / login

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 : Inscription / login

par patami » 23 févr. 2006, 23:38

encore une fois cyrano, tu fus plus rapide à poster, je n'ai pas eu l'occasion de lire ton post explicatif alors que j'étais entrain de rédiger mon propre post :p va falloir m'entraîner à réfléchir/écrire plus vite ^^

par agité » 23 févr. 2006, 23:01

rien en fait :roll:

par Cyrano » 23 févr. 2006, 23:00

Patami, relis donc ce que j'ai expliqué :-"

par patami » 23 févr. 2006, 22:58

la chaine en md5 que tu as mise est uniquement le md5 du pseudo. Il te faut ajouter un morceau supplémentaire (quelques mots en plus, des chiffres, ce que tu veux !) que seul toi connais, et qui sera toujours le même, sinon le gars n'aura qu'à chercher le md5 de son pseudo et aura la clé ..

ainsi, sur la page validinscription.php, il te faudra faire une comparaison avec le clé envoyée et la reformation de la chaine en md5 à partir du pseudo envoyé.

Exemple :

dans la page dont tu as posté le code :
$chaine_hachee = md5('zernk'.$_POST['pseudo'].'15ghje*');

dans la page qui va vérifier l'activation, validinscription.php, tu devras vérifier ainsi :
$chaine_hachee = md5('zernk'.$_GET['pseudo'].'15ghje*');

if ($chaine_hachee == $_GET['cle'])
{
//ici activation du compte
}

par agité » 23 févr. 2006, 22:57

ok je vois maintenant en fait c'est juste pour recreer la chaine que je comprenais pas trop et que je voulais dons stocker sa en memoire, je comprends qu'en effet sa ne fais que surchargé ma base !

en fait oui la comme sa c'est très clair Cyrano je te remerci encore une fois pour toute ces explications je met sa en place demain et si sa fonctionne ce sera super, je te dis un gros merci encore une fois !

par Cyrano » 23 févr. 2006, 22:53

Je t'explique un truc simple comme bonjour et visiblement tu cherches midi à quatorze heures : respire donc un grand coup et relis l'explication détaillée que j'ai suggérée.
  1. l'internaute remplit un formulaire d'inscription avec un certain nombre d'informations;
  2. Lors de la validation, tu enregistres ces informations et tu envoies un courriel d'activation avec un lien créé comme expliqué plus tôt;
  3. L'internaute reçoit ce courriel : il n'a aucun moyen de savoir comment a été générée la chaine hachée, ça, tu ne le révèle bien entendu à personne. J'ai suggéré pseudo+nom+prénom, tu peux utiliser autre chose du moment que ce sont des informations qui sont obligatoirement déjà dans la base;
  4. L'internaute clique sur le lien :
    • ton script d'activation récupère les paramètres pour initialiser des variables $pseudo et $cle;
    • Avec le pseudo, tu récupères avec une requête SQL les informations nécessaires pour reconstruire la chaine pseudo+nom+prenom
    • Avec ces informations, tu crées une chaine hachée que tu compares avec le second paramètre récupéré $cle : si ça correspond, c'est valide, sinon, c'est une tentative d'activation frauduleuse
  5. Selon le résultat, tu affiches le message de succès ou d'échec de la procédure d'activation.
Est-ce que tu visualises mieux le schéma maintenant ?

par agité » 23 févr. 2006, 22:43

ben en fait sa j'ai compris :D

mais moi le ptit malin qui sais que le lien de validation est : validinscription.php et qui veux me faire chier vas faire un lien direct avec son pseudo et plein d'email et pseudo bidon et surchargé la base de donnée.

Donc en fait ouais je pourrais ne pas me prendre la tête du tou, c'est a dire valider l'inscription cash a ce moment la sans passer par l'email, mais j'veux un peu plus de securité je sais c'est ptet un poil parano mais je préfère.

Et surtout sa fais plus classe :D

par Cyrano » 23 févr. 2006, 22:41

J'ai l'impression que tu as lu mes réponses en diagonale :-k

Si tu suis ma suggestion en détail, essaye de m'expliquer comment tu ferais pour aller sur la page d'activation sans passer par l'adresse du courriel ?

Pour récupérer les paramètres envoyés avec l'url, tu les auras dans la super-globale $_GET au chargement de la page. En fait, je ne comprends pas ce que tu ne comprends pas...

par agité » 23 févr. 2006, 22:35

ou alors j'ai encore rien compris ??

par agité » 23 févr. 2006, 22:29

ben si je suis obligé de la mettre quelque pars sinon comment verrifier qu'elle viens bien d'un email ?

le suite du script c'est de faire un lien verifinscription.php

qui testera :

-que l'id dans l'url est bien celle qui correspond a son nom
-que le nom correspond bien
-UPDATE le champ ENUM en oui

donc en fait j'utilise bien cette ID quelque pars sinon j'en vois pas l'interet ! :wink:

par Cyrano » 23 févr. 2006, 22:27

Ce n'est pas incompatible avec ce que je t'ai suggéré, d'autant que la chaine nÉtant stockée nulle part, il ne pourra pas la récupérer où que ce soit d'une part et sera obligé d'utiliser le lien dans son courriel pour activer son compte.

par agité » 23 févr. 2006, 22:25

en fait sois c'est moi qui n'aie rien compris sois c'est moi qui aie mal expliquer :D

en fait j'ai fais sa pour être clair :
<?

require ("connect.php");

$pseudo=$_POST['pseudo'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$email=$_POST['email'];
$email2=$_POST['email2'];

$ress=mysql_query("SELECT * FROM `art` WHERE nom='$pseudo' and email='$email' ");
$existe=mysql_num_rows($ress);
$chaine_hachee = md5($_POST['pseudo']);

if($pseudo!="" && $password!="" && $password2!="" && $email!="" && $email2!="")
{

	if($password==$password2 && $email==$email2)
		{

			if(!$existe)
				{
				$sql = "INSERT INTO art (nom,mdp,email,ID) VALUES ('".$pseudo."','".$password."','".$email."','".$chaine_hachee."')";
				$test = mysql_query($sql) or die("erreur ! ".mysql_error());
				$id = mysql_insert_id();
					$adresse = $email;
					$titre = "Inscription au generateur de son";
					$headers="From: Admin : Generateur de son !\n";
					$message = "Bienvenue !

Votre nom est : ".$pseudo."
Votre pass est : ".$password."

pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant :
http://localhost/ketalombre/validinscription.php?".$chaine_hachee;

				mail($adresse,$titre,$message,$headers);
				echo "<br>Votre nom a été ajouté a la base de donnée";

				}else{
					header("location: inscription.php?erreur3");
					}
		}else{
			header("location: inscription.php?erreur2");
			}

}else{
	header("location: inscription.php?erreur1");
	}


?>
et donc ma chaine faite avec md5 me sert a verrifier que le gars est bien passer par son mail pour activer son compte !

en fait c'est pour être sur qu'il active pas son compte sans passer par le mail si il connais le nom du script d'activation ainsi que l'url a rentrer !

je sais pas si je me fais bien comprendre, ou alors j'ai rien compris.

par Cyrano » 23 févr. 2006, 22:21

Tu as pas besoin de stocker cette chaine hachée dans la base, elle ne sert qu'une fois au moment de l'activation, c'est polluer ta base d'une donnée inutile. L'idée, c'est juste d'empécher la manipulation de la chaine dans l'url.

par agité » 23 févr. 2006, 21:55

ok donc j'ai rajouter sa :
$chaine_hachee = md5($_POST['pseudo']);
j'ai ajouter cette valeur en fin de table a ID :
	$sql = "INSERT INTO art (nom,mdp,email,ID) VALUES ('".$pseudo."','".$password."','".$email."','".$chaine_hachee."')";
				$test = mysql_query($sql) or die("erreur ! ".mysql_error());
puis je creer mon mail :
				$adresse = $email;
					$titre = "Inscription au generateur de son";
					$headers="From: Admin : Generateur de son !\n";
					$message = "Bienvenue !

Votre nom est : ".$pseudo."
Votre pass est : ".$password."

pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant :
http://localhost/ketalombre/validinscription.php?".$chaine_hachee;

				mail($adresse,$titre,$message,$headers);
mais ce que je comprends pas c'est qu'il m'affiche cette erreur la a nouveau alors que j'ai bien verrifier php.ini et tout marchais avant que je mette le champ en plus et le md5 ...
Warning: mail(): Failed to connect to mailserver at "smtp.wanadoo.fr" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\program files\easyphp1-8\www\ketalombre\verifinscription.php on line 37

par Cyrano » 23 févr. 2006, 20:50

Bon, je vais prendre un exemple qui sera plus clair : suppose que je m'inscris. Tu envoies un courriel avec un lien d'activation, mais ce lien comporte des paramètres, ce qui donnerait pour la création du lien:
<?php
$pseudo = "Cyrano";
$chaine_hachee = md5("CyranoNomPrenom");
$url = "<a href=\"http://mon_site.com/activation.php?pseudo=". $pseudo ."&cle=". $chaine_hachee ."\">Activez votre compte</a>";
echo($url);
?>
La dernière ligne n'est là que pour l'illustration, la variable serait à intégrer dans le message : Mais la chaine serait alors :

Code : Tout sélectionner

<a href="http://mon_site.com/activation.php?pseudo = Cyrano&cle=1226df9e32737581a163e2f22212e486">Activez votre compte</a></body>
Ce qui va simplement afficher
Activez votre compte
Dans la page de réception, ici, activation.php, tu récupères les deux paramètres. Avec le premier, tu vas récupérer le nom et le prénom correspondant avec une requête SQL. Tu reconstitues ensuite la chaine qui a servi à créer la clé et tu la haches de la même manière, puis tu compares avec le second paramètre envoyé.

Changer le pseudo rendra la clé invalide, et changer un caractère de la chaine hachée ne correspondra plus au pseudo : possibilité d'usurpation quasiment nul.