[PHP] Securite formulaire + base de donnee

Securite formulaire + base de donnee [PHP] - PHP - Programmation

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!!!!
Reply

Marsh Posté le 06-02-2007 à 13:40:28   

Reply

Marsh Posté le 06-02-2007 à 13:48:32    

Injection SQL


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

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 ?!?

Reply

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.


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
Reply

Marsh Posté le 06-02-2007 à 15:28:40    

sircam a écrit :

Balise code please...
 
Design : tu crées la table et/ou la DB dans le code chargé d'insérer un utilisateur ?!?


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??


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
Reply

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


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
Reply

Marsh Posté le 06-02-2007 à 15:44:36    

en utilisant md5(), sha1() et fonction similaire. Ou directement celles disponibles dans mysql. Avec un peu de recherche sur google ça devrait aller.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

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???


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
Reply

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.

Reply

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.  
 
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.


OK, tres interessant. Merci


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
Reply

Marsh Posté le 06-02-2007 à 16:16:02   

Reply

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 />";
}


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
Reply

Marsh Posté le 06-02-2007 à 16:56:41    

en faitr c'est bon c'est mmais conditions qui deconnais


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed