Securite formulaire + base de donnee [PHP] - PHP - Programmation
Marsh Posté le 06-02-2007 à 14:13:14
Balise code please...
Design : tu crées la table et/ou la DB dans le code chargé d'insérer un utilisateur ?!?
Marsh Posté le 06-02-2007 à 15:17:43
Pr l'injexction sql jai donc securisee la requete:
$fill_db = "INSERT INTO user (nom, prenom, login, adresse, cp, ville, email, pass, repass, date) VALUES (\"$nom\", \"$prenom\",\"$login\", \"$adresse\", \"$cp\",\"$ville\",\"$email\", \"$pass\", \"$repass\", \"$date\" )";
comme cela :
$fill_db = sprintf("INSERT INTO user (`nom`, `prenom`, `login`, `adresse`, `cp`, `ville`, `email`, `pass`, `repass`, `date`) VALUES ('%s', '%s','%s','%s','%d', '%s', '%s','%s','%s', '%s')", mysql_real_escape_string($nom, $link),
mysql_real_escape_string($prenom, $link),
mysql_real_escape_string($login, $link),
mysql_real_escape_string($adresse, $link),
$cp,
mysql_real_escape_string($ville, $link),
mysql_real_escape_string($email, $link),
mysql_real_escape_string($pass, $link),
mysql_real_escape_string($repass, $link),
$date);
est ce que c'est correct??
y-a-t-il dotre faille sql??
Si oui peut-tu m'indiquer a quel endroit
Merci de ton aide.
Marsh Posté le 06-02-2007 à 15:28:40
sircam a écrit : Balise code please... |
en fait tu veux que je face un fintion qui se connecte a la base une qui cree une table ainsi de suite... c'est ca??
Marsh Posté le 06-02-2007 à 15:37:20
Comment securiser les mots de passe des utilisateurs?? Parce que dans ma base il sont enregistres en clair
Marsh Posté le 06-02-2007 à 15:53:24
dwogsi a écrit : en utilisant md5(), sha1() et fonction similaire. Ou directement celles disponibles dans mysql. Avec un peu de recherche sur google ça devrait aller. |
J'ai donc utiliser md5... est-ce normal de voir les motr de passe en clair dans la base et non pas avec les signature md5 a la place???
Marsh Posté le 06-02-2007 à 16:04:20
drexlbob a écrit : en fait tu veux que je face un fintion qui se connecte a la base une qui cree une table ainsi de suite... c'est ca?? |
En fait, l'idéal, ca serait surtout d'avoir un script d'installation qui crait la base et les tables, et d'avoir la création des utilisateurs dans un autre script.
A l'opposé, il est abbérant d'essayer de recréer la table à chaque fois que quelqu'un s'inscrit (ca fait bosser la base pour rien. Si la table est recréé, tu perds tous tes inscrits et si elle n'est pas recré, la base va te gueuler dessus.
Marsh Posté le 06-02-2007 à 16:16:02
omega2 a écrit : En fait, l'idéal, ca serait surtout d'avoir un script d'installation qui crait la base et les tables, et d'avoir la création des utilisateurs dans un autre script. |
OK, tres interessant. Merci
Marsh Posté le 06-02-2007 à 16:22:09
drexlbob a écrit : en fait tu veux que je face un fintion qui se connecte a la base une qui cree une table ainsi de suite... c'est ca?? |
Jai un autre gros probleme avec ma fonction check_formu
Mon probleme:
Le meme que tout a l'heure. (si les champs ne sont pas rempli l'enregistrement se fait quand meme). Pourtant je ne vois pas de pb das les valeur de retour. Bref je vais surement vous embeter avec ce code mais ca serai vraiment cool de me dire pourquoi ca ne marche plus. Merci
Mes fonctions :
function insert_in_db($nom, $prenom, $login, $adresse, $cp, $ville, $email, $pass, $repass, $date, $link)
{
$fill_db = sprintf("INSERT INTO user (`nom`, `prenom`, `login`, `adresse`, `cp`, `ville`, `email`, `pass`, `repass`, `date`) VALUES ('%s', '%s','%s','%s','%d', '%s', '%s','%s','%s', '%s')", mysql_real_escape_string($nom, $link),
mysql_real_escape_string($prenom, $link),
mysql_real_escape_string($login, $link),
mysql_real_escape_string($adresse, $link),
$cp,
mysql_real_escape_string($ville, $link),
mysql_real_escape_string($email, $link),
mysql_real_escape_string($pass, $link),
mysql_real_escape_string($repass, $link),
$date);
$result = mysql_query($fill_db, $link);
echo "Inscription reussite !";
if (!$result)
die('Requete invalide : ' . mysql_error());
}
function check_form($nom, $prenom, $login, $adresse, $cp, $ville, $email, $pass, $repass, $date, $link)
{
$aroba = strpos($email, '@');
$dot = strpos($email, '.');
$retval = FALSE;
if(empty($nom))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre nom <br />";
}
if(empty($prenom))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre prenom<br />";
}
if(empty($login))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre login<br / >";
}
if(empty($adresse))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre adresse<br /";
}
if(empty($cp))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre code postal<br />";
}
elseif(isset($cp) && !is_numeric($cp))
{
$retval = FALSE;
echo "Code postal incorrect<br />";
}
if(empty($ville))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre ville<br />";
}
if (empty($email))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre email<br />";
}
elseif((isset($email)) && $aroba == '' && $dot == '')
{
$retval = FALSE;
echo "Mail invalide<br />";
}
if(empty($pass) || empty($repass))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre pass<br />";
}
if (!empty($pass) && !empty($repass) && $pass != $repass)
{
$retval = FALSE;
echo "Verifier vos champs de mots de passe (les deux mot de passe saisit doivent etre identiques)<br /> ";
}
else
$retval = TRUE;
if ($retval == TRUE)
insert_in_db($nom, $prenom, $login, $adresse, $cp, $ville, $email, $pass, $repass , $date, $link);
if ($retval == FALSE && file_exists("index.php" ))
include("index.php" );
}
function connect_db($host, $user, $password)
{
$link = mysql_connect("localhost", "root", "RXb6L9xd" );
if (!$link)
die('Impossible de se connecter : ' . mysql_error());
else
echo "Connexion reussie!!<br />";
}
Marsh Posté le 06-02-2007 à 16:56:41
en faitr c'est bon c'est mmais conditions qui deconnais
Marsh Posté le 06-02-2007 à 13:40:28
Bonjour.
Je suis debutant en Php et mysql et je ne connais pas bien la securite. j'ai donc un code a vous presenter (a mon avis pas du tout securise). Qu'est ce que vous pouvais me conseiller de faire afin de securiser aux maximum les infos dans la base de donnee???Si vous avez des sugestions d'optimisation j eprend aussi. En fait tous ce que vous voyez de defaillants je suis preneurs
(et pas de foutage de gueule ! lol)
Voici le code :
<?php
function insert_in_db($nom, $prenom, $login, $adresse, $cp, $ville, $email, $pass, $repass, $date)
{
$fill_db = "INSERT INTO user (nom, prenom, login, adresse, cp, ville, email, pass, repass, date) VALUES (\"$nom\", \"$prenom\",\"$login\", \"$adresse\", \"$cp\",\"$ville\",\"$email\", \"$pass\", \"$repass\", \"$date\" )";
$result = mysql_query($fill_db);
echo "Inscription reussite !";
if (!$result)
die('Requete invalide : ' . mysql_error());
}
function check_form($nom, $prenom, $login, $adresse, $cp, $ville, $email, $pass, $repass, $date)
{
$aroba = strpos($email, '@');
$dot = strpos($email, '.');
$retval = FALSE;
if(empty($nom))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre nom <br />";
}
if(empty($prenom))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre prenom<br />";
}
if(empty($login))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre login<br / >";
}
if(empty($adresse))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre adresse<br /";
}
if(empty($cp))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre code postal<br />";
}
if(empty($ville))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre ville<br />";
}
if (empty($email))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre email<br />";
}
elseif(!empty($email) && $aroba == '' || $dot == '')
{
$retval = FALSE;
echo "Mail invalide<br />";
}
if(empty($pass) || empty($repass))
{
$retval = FALSE;
echo "Vous avez oublie de saisir votre pass<br />";
}
elseif (!empty($pass) && !empty($repass) && $pass != $repass)
{
$retval = FALSE;
echo "Verifier vos champs de mots de passe (les deux mot de passe saisit doivent etre identiques)<br /> ";
}
else
$retval = TRUE;
if ($retval == TRUE)
insert_in_db($nom, $prenom, $login, $adresse, $cp, $ville, $email, $pass, $repass , $date);
if ($retval == FALSE && file_exists("index.php" ))
include("index.php" );
}
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$login=$_POST['login'];
$adresse=$_POST['adresse'];
$cp=$_POST['cp'];
$ville=$_POST['ville'];
$email=$_POST['email'];
$pass=$_POST['pass'];
$repass=$_POST['repass'];
$date = date("d/m/Y H:i:s " );
$link = mysql_connect("l*******", "***", "**********" );
if (!$link)
die('Impossible de se connecter : ' . mysql_error());
else
echo "Connexion reussie!!<br />";
$create_db = 'CREATE DATABASE `site`';
mysql_query($create_db);
$db_selected = mysql_select_db('site', $link);
if (!$db_selected)
die ('Impossible de selectionner la base de donnees : ' . mysql_error());
else
echo "Database selectionnee<br /> ";
$table = 'CREATE TABLE `user` ('
. ' `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, '
. ' `nom` VARCHAR(25) NOT NULL, '
. ' `prenom` VARCHAR(25) NOT NULL, '
. ' `login` VARCHAR(25) NOT NULL, '
. ' `adresse` VARCHAR(255) NOT NULL, '
. ' `cp` INT(5) NOT NULL, '
. ' `ville` VARCHAR(25) NOT NULL, '
. ' `email` VARCHAR(30) NOT NULL, '
. ' `pass` VARCHAR(15) NOT NULL, '
. ' `repass` VARCHAR(15) NOT NULL,'
. ' `date` VARCHAR(20) NOT NULL '
. ' )'
. ' TYPE = myisam;';
mysql_query($table, $link);
check_form($nom, $prenom, $login, $adresse, $cp, $ville, $email, $pass, $repass, $date);
mysql_close($link);
?>
---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!