conseils pour sécuriser un système d'authenfication

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 : conseils pour sécuriser un système d'authenfication

Re: conseils pour sécuriser un système d'authenfication

par pamalalarache » 01 avr. 2011, 11:51

Merci bien, c'est changé et j'ai crypter en md5 les mot de passe directement dans la base.

Re: conseils pour sécuriser un système d'authenfication

par xTG » 01 avr. 2011, 10:42

extract($_POST) t'enlèves pas mal de sécurité, tu risques avec ceci d'écraser des variables de tout type.
Il vaut mieux récupérer manuellement les variables quitte à écrire plus de code et surtout à les sécuriser :
$login = mysql_real_escape_string($_POST['login']);
Vu que le compte est censé être unique tu peux rajouter un LIMIT 1 à ta requête afin de limiter la recherche.

De ce fait tu n'es censé faire aucune boucle sur la récupération. Un simple mysql_fetch_assoc() précédé d'une vérification de résultat (on compte le nombre de résultat avec mysql_num_rows), car on ne peut récupérer un résultat s'il n'y en pas. ;)

Ensuite tu peux enlever ta seconde requête et l'intégrer dans la première, tu travailles sur la même table avec la même recherche.

Tes mots de passe semblent être en clair dans ta table non ?
Utilise un hash md5() avec une clé pour sécuriser les mots de passe.
$clé = "123456789%;sndf";
$pass = "mon mot de passe";
$mot_de_passe_securise = md5($clé . $pass);
On ne doit rien envoyer au navigateur avant de faire un header(), d'ailleurs il va te le dire via un beau warning.
Inverses le echo et le header().

conseils pour sécuriser un système d'authenfication

par pamalalarache » 01 avr. 2011, 10:08

Bonjour,

Je voudrais de vos conseils pour sécuriser une page authentification. On donne le login et mdp et selon le cas , on est redirigé ou pas.
Je ne pense pas que ce script a besoin de sécurité. Mais j'y connais un peu rien alors je voudrais bien vos conseils.
Donc ce sont deux pages toute bête. Je posterai par la suite le script qui permet l'ajout d'un utilisteur et d'un login dans la BDD, je tenterai d'abord de me débrouiller tout seul.
Mais pour simplement la phase authentification, je ne vois pas quoi sécuriser.

<form action="login2.php" method='post'>
<table align="center" border="0">
  <tr>
    <td>Login :</td>
    <td><input type="text" name="login" maxlength="250"></td>
  </tr>
  <tr>
    <td>Password</td>
    <td><input type="password"name="pass" maxlength="20"></td>
  </tr>
  <tr>
    <td colspan="2" align="center"><input type="submit" value="log in"></td>
  </tr>
</table>
</form> 
ET
<?php
include ("../../_modele/php/main.php");

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from administration where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);


 sql_mysql_query("SELECT id FROM administration	WHERE login = '$login'");
    while ($row = mysql_fetch_object($query)) {
		$id = $row->id;
    }
	
  if($data['password'] != $pass) {
    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    include('login1.php'); // On inclut le formulaire d'identification
    exit;
  }
  else {

   $_SESSION['id'] = $id;
    
    echo 'Vous etes bien logué';

    // vers la page d'accueil 
	   header("Location: ../../accueil/eap/acceuil.php");
  }   
}
else {
  echo '<p>Vous avez oublié de remplir un champ.</p>';


   include('login1.php'); // On inclut le formulaire d'identification
   exit;
}


?>