Php session [Résolu]

Signaler
Messages postés
58
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2012
-
Messages postés
261
Date d'inscription
mardi 2 juillet 2002
Statut
Membre
Dernière intervention
10 mars 2014
-
Bonjour à tous :
Je suis un debutant en php qui veut maintenant utliser les sessions.
En effet , j ai une page PHP pour que mes users puissent saisir leur login et password(index.php).
Une page pour controler l'existance de l'user et demarer la session(redirect.php)
qui redirige l user sur la page principale (homepage.php).
Sans utiliser, les sessions mon code marche à merveille.
Voici mon code:
--------------------------------------------------------------------------------------
---------------------------------INDEX.PHP--------------------------------------------
<form action="redirect.php" method="post">



</form>

--------------------------------------------------------------------------------------
------------------------------- REDIRECT.PHP------------------------------------------
<?php
require 'parameter.php';
//if ( (!empty($_POST['log'])) && (empty ($_POST['pwd'])) )
// {
$connect = mysql_connect ("localhost","root",$password);// or die('Erreur de connexion'.mysql_error());
mysql_select_db ("listen");////or die('Erreur de connexion'.mysql_error()) ;
$log=$_POST['log'];
$pwd=$_POST['pwd'];
$sql = "SELECT * from user where login='$log' and pass='$pwd' ";
$req = mysql_query($sql);
$num = mysql_num_rows($req);
if ($num >0)
{
session_start();
$_SESSION['log']=$log;
$_SESSION['pwd']=$pwd;
header('Location:homepage.php');
}
else
{
header('Location:index_faux.php');// login et pass incorrects

}
//}
?>
--------------------------------------------------------------------------------------------------------------------------- Homepage.php ----------------------------------
<?php
session_start;
if ( (isset($_SESSION['log'] )) && (isset($_SESSION['pwd'])) )
{
?>

CODE HTML DE MA PAGE

<?php
} else

{ // PAGE VIERGE
header('Location:nologin.php');
}
?>



Le problème est que meme si le login et le pwd sont bon , g vais toujour sur la page vierge
Aidez moi svp

10 réponses

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
Salut,

@bm1982:
C'est session_start(); pas session_start;


Attention à la sécurité !!!
Avec vos scripts il est très simple de s'authentifier sous n'importe quel pseudo, d'accéder à tout le contenu de la table, et sans doute bien plus.
=> il faut traiter convenablement les données provenant de l'utilisateur !!

Cordialement,


Kohntark -
Messages postés
261
Date d'inscription
mardi 2 juillet 2002
Statut
Membre
Dernière intervention
10 mars 2014
2
Hello,

pourquoi y'a autant de reLocation? surtout quand y a une erreur (index_faux.php, nologin.php) et pas juste un msg d'erreur..

A lire comme ca je vois pas trop d'ou vient ton erreur..
mais moi je ferais plutot un truc comme ca:

index.php:
<form action="redirect.php" method="post">



</form>

(j'ai mis login et pass au lieu de log et pwd car j'ai fait un copier coller et qe je voulais pas tout changer.. oublie pas de modifier sur ta page)

------

redirect.php:
<?php
//ouverture de la connexion MySQL
mysql_connect("localhost","root",$password);
mysql_select_db("taTable");

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 pass from user where pseudo='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data = mysql_fetch_assoc($req);

// On se déconnecte de MySQL
mysql_close();
if($data['pass'] != $pass) {
echo 'Mauvais login ou mot de passe.   Attention de respecter les Majuscules.
[index.php Retour]';
exit;
}
else {
session_start();
$_SESSION['login'] = $login;

echo 'Vous êtes bien logué';
header('Location: homepage.php');
exit;
}    
}
else {
echo 'Vous avez oublié de remplir un champ.';
exit;
}
?>

Dans ta table il faut que les colonnes aie les noms pseudo et pass pour cet exemple..

------

homepage.php:

<?php
session_start();

/* 
si la variable de session login n'existe pas cela siginifie que le visiteur n'a pas de session ouverte, il n'est donc pas logué ni autorisé à
acceder à l'espace membres (toutes les pages protègées doivent avoir cela)
*/

if(!isset($_SESSION['login'])) {
echo 'Vous êtes pas autorisé à acceder à cette zone, passez par la page de login..';
exit;
}
mysql_connect("localhost","root",$password);
mysql_select_db("taTable");
$b=$_SESSION['login'];
$reponse mysql_query("SELECT * FROM user WHERE pseudo '$b'");
// On se déconnecte de MySQL
mysql_close();

// Puis on fait une boucle pour afficher tous les résultats:
while ($donnees = mysql_fetch_array($reponse) )
{
echo 'Bienvenue '.$donnees['pseudo'].' tu vas bien?';
echo 'blabla bla';

// Fin de la boucle
}
?>


ouf je pensais pas tant écrire moi.. si c'est pas une B.A. ca
Messages postés
261
Date d'inscription
mardi 2 juillet 2002
Statut
Membre
Dernière intervention
10 mars 2014
2
Tchô kohntark!

Dans mon script tu vois des erreur de sécurité?
ou des trucs que tu améliorerais?

A tout bientot
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
Salut Mailliam,

En fait ton script ne protège rien du tout
Comme je le disais il est possible de retirer tout le contenu de la table user. A partir de là, et selon les fonctionnalités du site et les autres failles éventuelles, on peut pousser plus loin : suppression totale de la base, upload de fichiers, defacing, récupération / envoi de mails, etc ...

Je vois 3 grosses failles :
- tu ne traites pas les données provenant de l'utilisateur
=> une injection SQL est possible (et très simple à réaliser)
|->Le minimum est d'utiliser mysql_real_escape_string()

- tu emploies "extract($_POST)", ce qui laisse la possibilité à l'utilisateur de choisir le nom des variables et leurs valeurs
=> dans bien des cas ça peut s'avérer dangereux.
|-> il faut toujours "blinder" :
tu attends une chaîne de caractères dans $_POST['machin'] => il faut tester que $_POST['machin'] (et pas extract ...) est bien une string.
etc ...

- tu emploies "or die('Erreur SQL !
'.$sql.'
'.mysql_error());"
=> pour un petit malin c'est de l'or en barre, tu lui fournis le nom de ta table et d'autres informations essentielles au piratage d'un site.
|-> ne jamais fournir ce genre d'information à l'utilisateur (d'ailleurs l'utilisateur lambda s'en fout et ne comprendra rien au message) mais le rediriger vers une page qui lui permette de poursuivre sa navigation, avec éventuellement un log ou un mail à l'admin


Cordialement,

Kohntark -
Messages postés
58
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2012

Merci à vous tous,
Session_start (); ce ok;
Mais je vois que vous m'envoyer dans un autre domaine la sécurité des données transmises à ma BD ou récupérées.
Sachez que je commence à avoir peur de PHP dans la mesure ou notre application fin prête est utilisée par des milliers de personnes. Et ce n'est pas tout le monde qui
à une bonne moralité .
En fait , je serai ravi de recevoir de votre part , des liens ou des docs traitant de la sécurité des données à insérer ou à recuperer d'une base de données .

Cordialement,
Que Dieu vous bénisses et Que Dieu bénisses [b] CODESOURCES
/b
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
Que Dieu vous bénisses et Que Dieu bénisses CODESOURCES

Laisse donc dieu en dehors de ce forum, il a bien mieux à faire.
(je n'en fais pas une affaire d'état, c'est juste une remarque )

Il y a d'autres failles que je n'ai pas signalé :
- le stockage en clair du pass
- la mise en session (en clair) du pass
- l'absence de exit() après les header()
- l'utilisation de "$num >0" au lieu de "$num === 1"
- etc ...

Google t'aidera à trouver tout ce dont tu as besoin.
Je n'ai pas vérifié, mais des requêtes comme :

"php injection sql"
"php hashage mot de passe"
"php traitement des données utilisateurs"
"php sécurisation des scripts"
...

... devraient donner de bons résultats. Ceux ci te donneront d'autres mots clés, je te laisse le soin de la recherche.


Cordialement,

Kohntark -
Messages postés
58
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2012

Cette methode est securisée en cas de transmission ou de verification de données dans une BD

$log=mysql_real_escape_string(stripslashes($_POST['log']));
$pwd=mysql_real_escape_string(stripslashes($_POST['pwd']));
$sql = "SELECT * from user where login='$log' and pass='$pwd' ";


cordialement
Messages postés
58
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2012

Cette methode est elle securisée en cas de transmission ou de verification de données dans une BD?

$log=mysql_real_escape_string(stripslashes($_POST['log']));
$pwd=mysql_real_escape_string(stripslashes($_POST['pwd']));
$sql = "SELECT * from user where login='$log' and pass='$pwd' ";
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
C'est nettement mieux. Le stripslashes ne sert à rien.

Mais attention également aux autres points que je citais précédemment !


Cordialement,


Kohntark -
Messages postés
261
Date d'inscription
mardi 2 juillet 2002
Statut
Membre
Dernière intervention
10 mars 2014
2
Merci Kohntark, on va chercher un peu sur tout ce que t'as cité, car j'crois qu'y à faire là