Espace membre, sécurisé le mot de passe....

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 : Espace membre, sécurisé le mot de passe....

par AB » 16 janv. 2008, 17:19

Voir les vairables de serveur http://fr2.php.net/reserved.variables

Tu pourrais éventuellement utiliser 'HTTP_REFERER' mais ce n'est pas une variable de confiance (elle est parfois absente).

Ou sinon dans les liens qui dirigent vers ta page d'authentification tu pourrais faire passer une variable
page_appel=$_SERVER['REQUEST_URI'] qui sera ensuite utilisée pour la redirection. Tu peux aussi définir manuellement cette variable page_appel=12 et en fonction de cette valeur faire une redirection

par guigui69 » 16 janv. 2008, 15:15

Merci c'est tout bon j'ai trouver mon erreur moi même.

J'ai encore une petit question:

Est-il possible de retourner sur la page précédente après l'authentification.

Par exemple si j'arrive directement sur une page de mon site (visupdr.php), il va me demander de m'authentifier (include login.php) et je voudrait si possible après l'authentification que je puisse retourner sur la page que je voulait acceder au départ(visupdr.php) au lieu de retourner sur la page "acceuil.php".


Merci d'avance

guigui69

par Ryle » 16 janv. 2008, 13:00

Modération :

guigui69, le forum FAQ contient des explications détaillées sur ce sujet :
:arrow: Cannot add header information

Vérifier dans la FAQ ou faire une petite recherche préalable n'est pas superflu.

par guigui69 » 16 janv. 2008, 12:51

Bonjour à tous,

j'ai petit soucis au niveau de la partie identification, au niveau du header:

Code : Tout sélectionner

header("Location: acceuil.php");
Exemple si je suis sur page sans passer par la page login, il me renvoie (normal) sur la page de login.php. Après je rentre le login et mdp il me sort:

Code : Tout sélectionner

Warning: Cannot modify header information - headers already sent by

Cela signifie que sur la page acceuil.php il y a déjà une en tête html envoyer.

voici de le début de la page acceuil.php
<?php session_start(); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Acceuil</title>

<style type="text/css" title="mes_styles" media="all">
<!--
Par contre si je passe directement par la page login.php et que je m'identifie, j'ai pas d'erreur.

Pourquoi cette erreur, et comment arriver à la résoudre?

Merci d'avance pour votre aide.

guigui69

par AB » 11 janv. 2008, 17:28

Et tant qu'à faire autant utiliser le successeur du md5, le sha1. C'est hashé sur plus de bits donc plus sécurisé
$mdp = $_POST['mdp'];
$mdp_secu = sha1(base64_encode($mdp));

par zeus » 11 janv. 2008, 08:58

Le md5 étant irréversible, ça ne sert pas à grand chose, à part compliquer le code, que de l'exécuter plusieurs fois.

Par contre, transformer la base de ton mot de passe n'est pas une mauvaise idée.
$mdp = $_POST['mdp'];
$mdp_secu = md5(base64_encode($mdp));
Mais sinon :

Modération :
mike0001,

Merci de faire attention à la grammaire et l'orthographe lorsque tu rédiges tes messages.

Si besoin, voici une liste de sites pour t'aider :
Français : Dictionnaires, conjugaison et orthographe.

par mike0001 » 10 janv. 2008, 22:44

essaye pour mieux secu :
$mdp = $_POST['mdp'];
$mdp_secu = md5(base64_encode(md5(md5($mdp))));
la c sur il seront impossible a decrypter mdr

Ensuite pour verifier quand le mec a rentré son pass si il est bon, tu fait
$var1 = $_POST['mdp']
ensuite tu fait "si md5(base64_encode(md5(md5($var1)))) = $mdp_secu alors le mec pe rentré lol

Tu comprend ?

par AB » 10 janv. 2008, 21:23

Bon voilà, pour ceux qui prendrait le code ci-dessus comme modèle, il est viré le sprintf :)

On pourrait aussi le virer pour la requête mais je ne trouve pas l'écriture plus facile. A la lecture on y gagnerait cependant quand il y a beaucoup de variables.

par Ryle » 10 janv. 2008, 12:29

S'il y a quelque chose qui te gène, il suffit de le virer et tu verras qu'elle ne te gènera plus ;)

Plus sérieusement, la fonction sprintf() généralement utiliser à tort et à travers, a en gros pour but de permettre de construire une chaine et de la formater en y intégrant les valeurs spécifiées...

En gros ici
sprintf("Location: %s", "accueil.php")
il va remplacer le premier '%s' qui symbolise une chaine, par le premier argument qui suit dans la fonction, et qui devrait en toute logique être une chaine (manque d'ailleurs les quotes sur la tienne)

Le résultat étant la chaine
"Location: accueil.php"
Merci sprintf(), c'était vraiment très interessant.... ;)

En gros tout ce qu'il te faut pour la redirection c'est :
header("Location: accueil.php"); 
exit(); 
Quant au exit(), il faut savoir que malgré l'envoi du header() au navigateur et la redirection qui va suivre, php va continuer d'exécuter le script... Si par exemple tu modifies une variable de session après le header(), celle-ci sera modifié sur la prochaine page en dépit de la redirection. L'exit() permet d'interrompre le script et éviter que php n'aille exécuter la suite du code.

par guigui69 » 10 janv. 2008, 12:14

Merci je regarde ça, mais il y une partie du code que je ne comprend pas

Code : Tout sélectionner

header(sprintf("Location: %s", acceuil.php)); exit();
le header envoir une en tete html.

Mais le sprintf ainsi que %s je ne comprend pas a quoi ca sert ainsi que leur fonction. (j'ai regarder la signification de sprintf mais je la comprend pas :(

Location c'est pour re-dirigé vers une autre page.

Je ne voit pas pourquoi il y a exit a la fin.

Merci d'avance pour votre aide

guigui69

par AB » 09 janv. 2008, 23:31

Et puis ton code est mal organisé, faut éviter de mettre du code php dans ton code html quand ce n'est pas nécessaire. En reprenant les éléments de ton premier post ça devrait ressembler à quelque chose comme :
<?php session_start();

if(isset($_POST['validation']))

{ 

   function stripgpc($value) {
   if(get_magic_quotes_gpc()) $value = stripslashes($value);
   return $value;
   }

   $mdp = isset($_POST['mdp']) ? md5(stripgpc($_POST['mdp'])) : '';
   $login = isset($_POST['login']) ? stripgpc($_POST['login']) : '';

   if(!empty($mdp) && !empty($login)) 
      {

      $server="*******";
      $user="****";
      $pass="*****";
      $db="pdr";
      mysql_connect($server,$user,$pass) or die('erreur de connexion');
      mysql_select_db($db) or die ('impossible de se connecter a la base');

      $selection = sprintf("SELECT COUNT(*) as compte FROM user WHERE mdp_user ='%s' AND login_user ='%s'",
      mysql_real_escape_string($mdp),
      mysql_real_escape_string($login)); 

      $query = mysql_query($selection) or die(mysql_error());
      $totalReponse = mysql_fetch_assoc($query); 

       if ($totalReponse['compte'] == 1 ) 
          {
          $_SESSION['login'] = $login;
          header("Location: accueil.php"); exit();
          }
          else
          {
          $message = 'login ou mot de passe incorrect';
           }
       }
       else 
      {
       $message = 'login ou mot de passe manquant';
       }  
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans nom</title>

<style type="text/css" title="mes_styles" media="all">
<!--
#login {
border: medium solid #FF9900;
border-collapse: collapse;
position: absolute;
    top: 20px;
    left: 350px;
}
#ok{
font-family: Georgia, "Times New Roman", Times, serif;
color:#FF9900;
margin-top: 120px;
margin-left: 350px;
}

-->

</style>
</head>
<body> 
<div>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method='post'>
<table id="login">
  <tr>
    <td>Login :</td>
    <td><input type="text" name="login" maxlength="250"></td>
  </tr>
  <tr>
    <td>Password</td>
    <td><input type="password"name="mdp" maxlength="10"></td>
  </tr>
  <tr>
    <td colspan="2" align="center"><input type="submit" name="validation" id="validation" value="log in"></td>
  </tr>
</table>
</form> 
</div>
<div><?php if (isset($message)) echo $message ?></div>
</body>
</html>
Voilà quelque chose de plus "propre". Encore que tu aurais pu te passer de tableau et utiliser simplement des balises div ou p pour faire ton formulaire :wink:

par AB » 09 janv. 2008, 21:29

Merci pour ta réponse, mais c'est pas plutôt il supprime les slashes (stripslashes) ?

guigui69
Oui, sa langue à fourché :wink:

C'est bien ce que réalise cette ligne :
Si get_magic_quotes_gpc() est activé, le serveur va mettre des slashes (si nécessaire) dans toutes les variables $_GET, $_POST, $_COOKIE (d'où l'appellation gpc). Pour les supprimer uniquement si get_magic_quotes_gpc() est activé et afin d'obtenir la valeur originale de la variable ont utilise donc la fonction stripslashes();
if(get_magic_quotes_gpc()) $value = stripslashes($value);
J'ai donc créer la petite fonction stripgpc (j'aurai pu l'appeler 'carambar' ) qui contient cette ligne et retourne la valeur de la variable envoyée à la fonction, débarrassée des éventuels slashes au cas où get_magic..gpc() est activé
function stripgpc($value) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return $value;
} 
Pour traiter chaque variable avec ma fonction stripgpc(), je fais donc :
$login = isset($_POST['identifiant']) ? stripgpc($_POST['identifiant']) : ''; 
//md5 uniquement si les mots de passe sont codés en md5 dans la base de donnée
$mdp = isset($_POST['mot_de_passe']) ? md5(stripgpc($_POST['mot_de_passe'])) : '';
Cette manière de faire à l'avantage de donner les bons résultats sur n'importe quel serveur, quelque soit sa configuration.


C'est ensuite la fonction mysql_real_escape_string() qui servira pour protéger les variables dans la requête.

par guigui69 » 09 janv. 2008, 10:29

Merci pour ta réponse, mais c'est pas plutôt il supprime les slashes (stripslashes) ?

guigui69

par agité » 08 janv. 2008, 17:06

http://fr3.php.net/manual/fr/function.g ... es-gpc.php

Retourne la configuration actuelle de l'option magic_quotes_gpc

en fait il existe une fonction magiq quote qu'il faut desactiver sur ton server mais parfois tu ne peux pas alors il faut passer par une fonction simple.

En fait il prends la valeur regarde si les magic quote sont mise sur ton server, ensuite il ajoute des addslashes le cas échéant, c'est une simple fonction pour eviter qu'il ne fasse une requete avec des noms style "les '\\\apostrophes".

par guigui69 » 08 janv. 2008, 16:35

Merci, pour vos réponses, j'ai vérifier mon code:

Si l'utilisateur rentre ni login ni mot de passe ou seulement l'un des 2 il lui renverra

Code : Tout sélectionner

If (empty($login) OR empty($mdp)) { echo 'login ou mot de passe incorrecte ou manquant 1'; } else { .....
Est-ce bon quand même ou est-il préférable de passé par vos code précédemment cité AB et invité?

Je vais regarder les codes comme vous m'avez donnés et voir si je les comprends :(

Merci d'avance

guigiu69

=================================

MAJ

Je n'arrive pas a comprend cette partie:

Code : Tout sélectionner

function stripgpc($value) { if(get_magic_quotes_gpc()) $value = stripslashes($value); return $value; } $mdp = isset($_POST['mot_de_passe']) ? md5(stripgpc($_POST['mot_de_passe'])) : ''; $login = isset($_POST['identifiant']) ? stripgpc($_POST['identifiant']) : '';