begin process at 2012 05 27 16:33:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > ACCÈS, ESPACE MEMBRE AVEC INSCRIPTION ET DÉSINSCRIPTION PAR MAIL

ACCÈS, ESPACE MEMBRE AVEC INSCRIPTION ET DÉSINSCRIPTION PAR MAIL


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Classé sous :accès-gestion membre, espace membre, valider mail, protéger site, php-sql cookie Niveau :Débutant Date de création :20/12/2011 Date de mise à jour :02/01/2012 16:04:59 Vu / téléchargé :3 259 / 836

Auteur : stephelle

Ecrire un message privé
Site perso
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Après avoir chercher et télécharger un peu tout sur le net qui ne fonctionnait pas et vu que plusieurs personnes cherchaient la même chose, J'ai décidé d'en créer un.
Il permet de protéger un espace de votre site. A vous de choisir les pages à protéger.
Il est simple d'utilisation même pour les débutants.
Il utilise du PHP, une table SQL (pour s'inscrire) et Cookie ( pour s'identifier).
Il utilise le hachage md5 pour le mot de passe.
Il efface les enregistrements non validé depuis 48h lors d'une connexion



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

20 décembre 2011 14:24:20 :
En modifiant le fichier activer-compte-utilisateur, j'avais laissé une erreur. Je n'avais pas préciser qu'il fallait remplir le fichier config.php.
22 décembre 2011 09:48:06 :
fichier mieux protégé.
27 décembre 2011 14:31:52 :
Plus de sécurité Efface les enregistrements non validé par mail depuis 48h
30 décembre 2011 18:20:24 :
Un fichier de base pour l'administration a été rajouté.
02 janvier 2012 16:05:02 :
Protection des suppressions de compte membre

 Sources de la même categorie

Source avec Zip Source avec une capture CAPTCHA AJAX ANTI-BOT par darkvador59
Source avec Zip CRYPTAGE REVERSIBLE par Mokost
Source avec Zip Source avec une capture CREATION DE COMPTE AVEC CRYPTAGE ET ESPACE DE CONNEXION SEC... par bm1982
PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien
CRYPTAGE/DECRYPTAGE MCRYPT par sephirothgeek

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture UPLOAD CENTER par basssem81
Source avec Zip Source avec une capture ESPACE MEMBRE , AVEC CASE OPTIONNEL , SANS MYSQL par sartoz
Source avec Zip Source avec une capture CONNEXION DISTANTE À ZL-MEMBRE : ESPACE MEMBRES / CLIENTS A... par sam_sam_sam
Source avec Zip IMAGINE-CMS V2.20 par djack69
Source avec Zip GESTION D'ESPACE MEMBRES par jmpicot

Commentaires et avis

Commentaire de stephelle le 20/12/2011 13:56:00

N'oubliez pas de remplir le fichier config.php

Commentaire de camillagaiaschicherie le 20/12/2011 13:59:02

bonjour,

utilisation de function obsolete :ereg par exemple
code sensible aux injections sql
...

ne pas utiliser en production

Commentaire de cod57 le 20/12/2011 14:43:00

bonjour

après avoir installé ton code j'ai une erreur ligne 177 mysql_close();
dés l'inscription
tu devras positionner la fermeture ailleur(s) ...
tu postes direct
$_POST["TB_Nom_Utilisateur"] ... dans la requête donc possibilités -> injections sql, xss ... pas de protections à l'horizon
et l'inscription ne fonctionne pas

activer-compte-utilisateur.php?id=2&clef=bce23679
ceci est toujours vrai ? et cela crée une erreur, un message dés l'activation
$heure2=$heure-$validite;
mysql_query("DELETE FROM Comptes_Utilisateurs WHERE heure<$heure2 AND Compte_Active='0'");

bon j'arrête là

++

Commentaire de stephelle le 20/12/2011 16:12:54

merci pour vos commentaires.
Si je remplace ereg par preg_match, je me retrouve avec une erreur No ending delimiter '^' found....
Pour la suppression des vieux comptes, je l'ai supprimé en attentant de m'y attarder.
Où dois-je mettre mysql close? (je n'ai pas d'erreur).
Pour les injections sql et xss. J'essayerai de m'y pencher mais c'est pas gagné!!!

Commentaire de cod57 le 20/12/2011 16:34:19

dans creer-compte-utilisateur.php
ici
$message .= " est déjà utilisée";}
}
mysql_close();    
}else ...

puis
$masquer_formulaire = true;}                        
}
mysql_close();    
ça m'a enlevé l'erreur ...
je vais regarder ton code plus en détails plus tard

Commentaire de stephelle le 20/12/2011 19:52:59

J'ai bien essayé ça pour remplacer "ereg" mais je retrouve directement à la page "connexion" sans la phrase de confirmation.
activer compte utilisateur, ligne 15:
if(preg_match("/[0-9]+/", $_GET["id"]) && preg_match("/[a-f0-9]{8}/",$_GET["clef"]))

Fini pour ce soir,je continuerai demain.

Commentaire de cod57 le 20/12/2011 20:30:34

exemple dans creer-compte-php.php

if(isset($_POST["BT_Envoyer"]))
     {
          
          // Vérification de la validité des champs
          if(!preg_match('/^[A-Za-z0-9_]{4,20}$/',$_POST['TB_Nom_Propre']))
          {
               $message = 'Votre nom propre doit comporter entre 4 et 20 caractères<br />\n';
               $message .= 'L\'utilisation de l\'underscore est autorisée';
          }
      
          
          if(!preg_match('/^[A-Za-z0-9_]{4,20}$/',$_POST['TB_Prenom']))
          {
               $message = 'Votre nom d\'utilisateur doit comporter entre 4 et 20 caractères<br />\n';
               $message .= 'L\'utilisation de l\'underscore est autorisée';
          }
      if(!preg_match('/^[A-Za-z0-9_]{4,20}$/',$_POST['TB_Nom_Utilisateur']))
          {
               $message = 'Votre nom d\'utilisateur doit comporter entre 4 et 20 caractères<br />\n';
               $message .= 'L\'utilisation de l\'underscore est autorisée';
          }
          elseif(!preg_match('/^[A-Za-z0-9]{4,}$/',$_POST['TB_Mot_de_Passe']))
          {
               $message = 'Votre mot de passe doit comporter au moins 4 caractères';
          }
          elseif($_POST['TB_Mot_de_Passe'] != $_POST['TB_Confirmation_Mot_de_Passe'])
          {
               $message = 'Votre mot de passe n\'a pas été correctement confirmé';
          }
          
          
          elseif(!preg_match('/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$/',
               $_POST['TB_Adresse_Email']))
          {
               $message = 'Votre adresse e-mail n\'est pas valide';
          }
          else
          {

Commentaire de cod57 le 20/12/2011 21:06:55

creer-compte-php.php
voilà une correction plus secure

<?php
function nettoieProtect(){

foreach($_POST as $k => $v){
  $v=mysql_real_escape_string(strip_tags(trim($v)));
  $_POST[$k]=$v;
  }
  foreach($_GET as $k => $v){
  $v=mysql_real_escape_string(strip_tags(trim($v)));
  $_GET[$k]=$v;
  }
  foreach($_REQUEST as $k => $v){
  $v=mysql_real_escape_string(strip_tags(trim($v)));
  $_REQUEST[$k]=$v;
  }

}


//print_r($_POST);
//require "config.php";


// Redirige l'utilisateur s'il est déjà identifié
if(isset($_COOKIE["ID_UTILISATEUR"]))
{
     header("Location: index.php");exit;
}
else
{
    
     // Formulaire visible par défaut
     $masquer_formulaire = false;
    
     // Une fois le formulaire envoyé
     if(isset($_POST["BT_Envoyer"]))
     {
          
          // Vérification de la validité des champs
          if(!preg_match('/^[A-Za-z0-9_]{4,20}$/',$_POST['TB_Nom_Propre']))
          {
               $message = 'Votre nom propre doit comporter entre 4 et 20 caractères<br />\n';
               $message .= 'L\'utilisation de l\'underscore est autorisée';
          }
      
          
          if(!preg_match('/^[A-Za-z0-9_]{4,20}$/',$_POST['TB_Prenom']))
          {
               $message = 'Votre nom d\'utilisateur doit comporter entre 4 et 20 caractères<br />\n';
               $message .= 'L\'utilisation de l\'underscore est autorisée';
          }
      if(!preg_match('/^[A-Za-z0-9_]{4,20}$/',$_POST['TB_Nom_Utilisateur']))
          {
               $message = 'Votre nom d\'utilisateur doit comporter entre 4 et 20 caractères<br />\n';
               $message .= 'L\'utilisation de l\'underscore est autorisée';
          }
          elseif(!preg_match('/^[A-Za-z0-9]{4,}$/',$_POST['TB_Mot_de_Passe']))
          {
               $message = 'Votre mot de passe doit comporter au moins 4 caractères';
          }
          elseif($_POST['TB_Mot_de_Passe'] != $_POST['TB_Confirmation_Mot_de_Passe'])
          {
               $message = 'Votre mot de passe n\'a pas été correctement confirmé';
          }
          
          
          elseif(!preg_match('/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$/',
               $_POST['TB_Adresse_Email']))
          {
               $message = 'Votre adresse e-mail n\'est pas valide';
          }
          else
          {
              
               require 'config.php';
               // Connexion à la base de données
               // Valeurs à modifier selon vos paramètres configuration
               mysql_connect($dbhost,$dbuser,$dbpass);
               mysql_select_db($db);
               nettoieProtect();
               extract($_POST);
               // Vérification de l'unicité du nom d'utilisateur et de l'adresse e-mail
               $result = mysql_query("
                    SELECT Nom_Utilisateur
                    , Adresse_Email
                    FROM Comptes_Utilisateurs
                    WHERE Nom_Utilisateur = '".$TB_Nom_Utilisateur."'
                    OR Adresse_Email = '".$TB_Adresse_Email."'
               ");
              
               // Si une erreur survient
               if(!$result)
               {
                    $message = "Erreur d'accès à la base de données lors de la vérification d'unicité";
               }
               else
               {
                    
                    // Si un enregistrement est trouvé
                    if(mysql_num_rows($result) > 0)
                    {
                        
                         while($row = mysql_fetch_array($result))
                         {
                              
                              if($TB_Nom_Utilisateur === $row['Nom_Utilisateur'])
                              {
                                   $message='Le nom d\'utilisateur '.$TB_Nom_Utilisateur;
                                   $message.=' est déjà utilisé';
                              }
                              elseif($TB_Adresse_Email === $row['Adresse_Email'])
                              {
                                   $message = 'L\'adresse e-mail '.$TB_Adresse_Email;
                                   $message .= ' est déjà utilisée';
                              }
                              
                         }
                    
                    mysql_close();    
                    }
                    else
                    {
                        
                         // Génération de la clef d'activation
                         $caracteres=array('a','b','c','d','e','f',0,1,2,3,4,5,6,7,8,9);
                         $caracteres_aleatoires=array_rand($caracteres,8);
                         $clef_activation=null;
                        
                         foreach($caracteres_aleatoires as $i)
                         {
                              $clef_activation .= $caracteres[$i];
                         }
                         // Création du compte utilisateur
                         $result = mysql_query("
                         INSERT INTO Comptes_Utilisateurs(
                         Nom_Propre
        ,Prenom
        ,Nom_Utilisateur
                        ,Mot_de_Passe
                        ,Adresse_Email
                        ,Date_Inscription
                        ,Clef_Activation
        ,ip
                         )
                         VALUES(
                        '".$TB_Nom_Propre."'
        ,'".$TB_Prenom."'
        ,'".$TB_Nom_Utilisateur."'
                        ,'".md5($TB_Mot_de_Passe."'
                        ,'".$TB_Adresse_Email."'
                        ,'".time()."'
                        ,'".$clef_activation."'
        ,'".$ip=$_SERVER['REMOTE_ADDR']. "'
                              )
                         ");
                        
                         // Si une erreur survient
                         if(!$result)
                         {
                              $message = "Erreur d'accès à la base de données lors de la création du compte utilisateur";
                         }
                         else
                         {
                              
                              // Envoi du mail d'activation
                              $sujet = "Activation de votre compte utilisateur";
                              
                         $message = " Ce mail vous a été envoyer car il a été enregistré lors de l'inscription sur le \n";
             $message .= "site de (votre site). Pour valider votre inscription, merci de cliquer sur le lien suivant :\n";
                         //$message .= "http://" . $_SERVER["SERVER_NAME"];
                         $message .= 'http://'.$_SERVER['HTTP_HOST'];
                         $end=end(explode('/',$_SERVER['PHP_SELF']));
                         $rep=str_replace($end,'',$_SERVER['PHP_SELF']);
                         $message .= $message.$rep.'activer-compte-utilisateur.php?id='.mysql_insert_id();
                         $message .= '&clef='.$clef_activation;
                              
                              // Si une erreur survient
                              if(!@mail($_POST["TB_Adresse_Email"], $sujet, $message))
                              {
                                   $message = "Une erreur est survenue lors de l'envoi du mail d'activation<br />\n";
                                   $message .= "Veuillez contacter l'administrateur afin d'activer votre compte";
                              }
                              else
                              {
                                  
                                   // Message de confirmation
                                   $message = "Votre compte utilisateur a correctement été créer<br />\n";
                                   $message .= "Un email vient de vous être envoyer afin de l'activer";
                                  
                                   // On masque le formulaire
                                   $masquer_formulaire = true;
                                  
                              }
                              
                         }
                    
                    mysql_close();    
                    }  
                    
               }
              
          }
          
          // Fermeture de la connexion à la base de données
          //
          
     }
    
} //cookie

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
     <title>Inscription</title>
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
#creation {
background-color: #CCC;
height: 340px;
width: 300px;
margin-right: auto;
margin-left: auto;
border-top-style: double;
border-right-style: double;
border-bottom-style: double;
border-left-style: double;
text-align: center;
}
.formu {
font-size: 18px;
font-weight: bold;
text-decoration: underline;
text-align: center;
}
.formulairetexte {
text-align: center;
}
</style>
</head>

<body>
<div id="creation">
  <p class="formu">Inscription:  </p>
  <form action="http://<?php echo $_SERVER["SERVER_NAME"] . $_SERVER["SCRIPT_NAME"]; ?>" method="post">
    <p><span class="formulairetexte">Nom :
        <input type="text" name="TB_Nom_Propre" />
    </span></p>
    <p><span class="formulairetexte">Pr&eacute;nom :
      <input type="text" name="TB_Prenom" />
    </span> </p>
    <p><span class="formulairetexte">Nom d'utilisateur :
  <input type="text" name="TB_Nom_Utilisateur" />
    </span></p>
    <p class="formulairetexte"> Mot de passe :
      <input type="password" name="TB_Mot_de_Passe" />
    </p>
    <p class="formulairetexte"> Confirmer le passe:
      <input type="password" name="TB_Confirmation_Mot_de_Passe" />
    </p>
    <p class="formulairetexte"> Adresse e-mail :
      <input type="text" name="TB_Adresse_Email" />
    </p>
    <p>
      <span class="formulairetexte">
      <input type="submit" name="BT_Envoyer" value="Envoyer" />
    </span></p>
  </form>
</div>
<p class="formulairetexte"><span class="formu">
  <?php if(isset($message)) { ?>
  <?php echo $message; ?>
  <?php } if($masquer_formulaire != true) { ?>
</span>  
  <?php } ?>
</p>
<p>&nbsp;</p>
</body>
</html>

Commentaire de stephelle le 21/12/2011 18:41:38

Merci Cod57. Gros boulot!!
J'ai changer tous les preg_match des autres pages.
Par contre, je me retrouve avec une erreur lors de l'inscription.
erreur d'accès à la base lors de la création du compte utilisateur.
Y-a-t-il quelque chose à changer dans ma base de donnée?
je ne comprend pas ce que fait print_r($_post);

Merci encore

Commentaire de stephelle le 21/12/2011 19:27:42

Pardon, pour l'erreur, c'est de ma faute, une bêtise qui trainait.
COD57, Penses-tu qu'il y a d'autres choses à changer ou à améliorer?

Je pense que je vais me replonger dans les bouquins pour une grosse mise à jour!!!

Commentaire de cod57 le 21/12/2011 19:45:37

bonjour
Pour l'inscription 'non', mais faudrait que je regarde le reste ! Dés que j'ai un peu de temps.
Tu pourrais cacher config.php dans un répertoire secret/config.php avec un .htaccess avec deny from all ...
++

Commentaire de arta le 26/12/2011 06:57:12

Bonjour

Pour suivre .....

Commentaire de macleod7 le 26/12/2011 09:41:41

C'est un script qui ressemble étrangement et qui existe déjà pour l'avoir vu sur http://www.asp-php.net/tutorial/asp-php/creer-un-espace-membre-en-php.php?page=2

Commentaire de jadu le 26/12/2011 12:25:55

Je crois que ce serait pas mal si il y avait un fichier .css pour regrouper toutes les mises en forme, non ?
Ou alors l'intégrer dans le fichier .css du site dans lequel on place cet espace membres.

Si je le fais je le mettrais ici ! ([em]En deux versions qui, si je réfléchis bien, sera une seule , en fait ...[/em] )

Commentaire de cod57 le 26/12/2011 20:31:58

bonjour

j'ai remarqué dans desinscription-compte-utilisateur.php il faut mettre
ligne 5
$Adresse_Email = isset($_POST['TB_Adresse_Email']) ? $_POST['TB_Adresse_Email'] : null;
ligne 119
<?php } if(isset($masquer_formulaire) && $masquer_formulaire != true) { ?>
car ces variables ne sont pas définies

a++

Commentaire de ryosama le 27/12/2011 08:44:19

Bonjour,

Je me permet de corriger l'expression régulière ligne 46 :
^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$

Il y a une erreur pour matcher un point. Ce n'est pas "." mais "\."
"." signifie n'importe quel caractère hors ici seul le point nous interesse.
La bonne expression est :
^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\.-]{2,}\.[a-zA-Z]{2,4}$

encore mieux en utilisant preg_match et le modifier "i"
/^[A-Z\d\._-]+@[A-Z\d\.-]{2,}\.[A-Z]{2,4}$/i

Commentaire de lacoste2209 le 29/12/2011 15:05:55

Salut; Moi aussi j'ai le même problème!! erreur d'accès à la base lors de la création du compte utilisateur. :S :S, tu peux m'expliquer l'erreur STP?

Commentaire de cod57 le 29/12/2011 19:48:02

bonsoir

j'ai remarqué que le fichier supprimer.php est léger au niveau sécurité
mysql_real_escape_string($tutu) serait souhaitable
si on connait le mail d'un membre on peut le supprimer direct depuis l'url
supprimer.php?Adresse_Email=toto@free.fr
tu devrais protéger avec une clé comme dans l'activation
le message de suppression s'affiche réussi ou pas il y a une erreur de logique

++

Commentaire de ractance le 24/02/2012 06:29:26

Bonjour,est il possible de renseigner le champ To dans le message reçut pour l'activation .
a++

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales