celui a l'air de correctement fonctionner sauf qu'en faisant des testes j'ai remarqué que malgré les restrictions non respecté (voir ci dessous) le mail d'activation est bien envoyé et l'inscription dans la base se produit
-les restrictions du nombres de caractères ne produise qu'un message en cas d'erreur
-même si la confirmation du mot de passe est différente du mot de passe l'inscription se produit quand meme
voila un exemple de message d'erreur:
Il semblerait que cela soit un probleme d'arret du script en cas d'erreur, j'ai pensé a utiliser la fonction "exit" mais je craique ca bloque completement la page.Votre nom d'utilisateur doit comporter entre 4 et 20 caractères
L'utilisation de l'underscore est autorisée
Votre compte utilisateur a correctement été créer. Un email de confirmation vient de vous être envoyer afin de valider l'inscription
Mon second problème concerne la sécurité, je vois de nombreuses choses concernant la securité mais qu'est ce qui est vraiment indispensable et comment l'utiliser vraiment?
voila mon code:
<?php
// Redirige l'utilisateur s'il est déjà identifié
if(isset($_COOKIE["ID_UTILISATEUR"]))
{
header("Location: index.php");
}
else
{
// Formulaire visible par défaut
$masquer_formulaire = false;
// Une fois le formulaire envoyé
if(isset($_POST["BT_Envoyer"]))
{
//echo '<pre>';
//print_r($_POST);
//echo '</pre>';
// Vérification de la validité des champs
if(!ereg("^[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(!ereg("^[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(!ereg("^[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
{
}
if(!empty($message)){
echo $message;
}else{
}
// Connexion à la base de données
$sql_host = "localhost";
$sql_user = "force318_chfr";
$sql_pwd = "nostradamus0501";
$sql_port = "3306";
$sql_db = "force318_vincelufologue";
mysql_connect($sql_host,$sql_user,$sql_pwd);
mysql_select_db($sql_db);
//ANTI INJECTION
foreach($_POST as $k => $v){
$v=mysql_real_escape_string(htmlentities($v));
$_POST[$k]=$v;
}
foreach($_GET as $k => $v){
$v=mysql_real_escape_string(htmlentities($v));
$_GET[$k]=$v;
}
// Vérification de l'unicité du nom d'utilisateur et de l'adresse e-mail
$sql = "SELECT Nom_Utilisateur, Adresse_Email FROM Comptes_Utilisateurs WHERE Nom_Utilisateur='".$_POST["TB_Nom_Utilisateur"]."' OR Adresse_Email='".$_POST["TB_Adresse_Email"]."' ";
$result = mysql_query($sql) or die (mysql_error());
// 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($_POST["TB_Nom_Utilisateur"] == $row["Nom_Utilisateur"])
{
$message = "Le nom d'utilisateur " . $_POST["TB_Nom_Utilisateur"];
$message .= "est déjà utilisé";
}
elseif($_POST["TB_Adresse_Email"] == $row["Adresse_Email"])
{
$message = "L'adresse e-mail " . $_POST["TB_Adresse_Email"];
$message .= "est déjà utilisée";
}
}
}
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 = "";
foreach($caracteres_aleatoires as $i)
{
$clef_activation .= $caracteres[$i];
}
// Création du compte utilisateur
$result = mysql_query("
INSERT INTO Comptes_Utilisateurs(
Nom_Utilisateur
, Mot_de_Passe
, Adresse_Email
, Date_Inscription
, Clef_Activation
)
VALUES(
'" . $_POST["TB_Nom_Utilisateur"] . "'
, '" . md5($_POST["TB_Mot_de_Passe"]) . "'
, '" . $_POST["TB_Adresse_Email"] . "'
, '" . time() . "'
, '" . $clef_activation . "'
)
") or die("Erreur : ".mysql_error());
// 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 = "Pour valider votre inscription, merci de cliquer sur le lien suivant :\n";
$message .= "http://" . $_SERVER["SERVER_NAME"];
$message .= "/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";
$message .= "Veuillez contacter l'administrateur afin d'activer votre compte";
}
else
{
// Message de confirmation
$message = "Votre compte utilisateur a correctement été créer. ";
$message .= "Un email de confirmation vient de vous être envoyer afin de valider l'inscription";
// On masque le formulaire
$masquer_formulaire = true;
}
}
}
}
// Fermeture de la connexion à la base de données
mysql_close();
}
}
?>
<!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 Forces Spéciales</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php if(isset($message)) { ?>
<p><?php echo $message; ?></p>
<?php } if($masquer_formulaire != true) { ?>
<FORM method="POST" action='http://<?php echo $_SERVER["SERVER_NAME"] . $_SERVER["SCRIPT_NAME"];?>' >
<p>
Nom d'utilisateur : <input type="text" name="TB_Nom_Utilisateur" />
</p>
<p>
Mot de passe : <input type="password" name="TB_Mot_de_Passe" />
</p>
<p>
Confirmation du mot de passe : <input type="password" name="TB_Confirmation_Mot_de_Passe" />
</p>
<p>
Adresse e-mail : <input type="text" name="TB_Adresse_Email" />
</p>
<p>
<input type="submit" name="BT_Envoyer" value="Envoyer" />
</p>
</FORM>
<?php } ?>
</body>
</html>
et celui de la BDD
-- phpMyAdmin SQL Dump
-- version 3.4.10.1
-- http://www.phpmyadmin.net
--
-- Client: localhost
-- Généré le : Sam 26 Mai 2012 à 22:22
-- Version du serveur: 5.5.22
-- Version de PHP: 5.2.9
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données: `force318_vincelufologue`
--
-- --------------------------------------------------------
--
-- Structure de la table `Comptes_Utilisateurs`
--
CREATE TABLE IF NOT EXISTS `Comptes_Utilisateurs` (
`ID_Utilisateur` bigint(255) NOT NULL AUTO_INCREMENT,
`Nom_Utilisateur` varchar(20) NOT NULL,
`Mot_de_Passe` varchar(32) NOT NULL,
`Adresse_Email` varchar(255) NOT NULL,
`Date_Inscription` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`Compte_Active` enum('0','1') NOT NULL DEFAULT '0',
`Clef_Activation` varchar(8) NOT NULL,
PRIMARY KEY (`ID_Utilisateur`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Contenu de la table `Comptes_Utilisateurs`
--
INSERT INTO `Comptes_Utilisateurs` (`ID_Utilisateur`, `Nom_Utilisateur`, `Mot_de_Passe`, `Adresse_Email`, `Date_Inscription`, `Compte_Active`, `Clef_Activation`) VALUES
(5, 're', '997ab1536cd440d2daec3e26f96853e0', '[email protected]', '0000-00-00 00:00:00', '0', 'cf136789');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;