Php session

Résolu
bm1982 Messages postés 58 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 10 juin 2012 - 26 juin 2010 à 16:11
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 - 29 juin 2010 à 14:17
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

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
26 juin 2010 à 21:01
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 -
3
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 3
26 juin 2010 à 18:09
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
0
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 3
27 juin 2010 à 08:53
Tchô kohntark!

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

A tout bientot
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 juin 2010 à 09:56
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 -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bm1982 Messages postés 58 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 10 juin 2012
27 juin 2010 à 11:09
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 juin 2010 à 11:39
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 -
0
bm1982 Messages postés 58 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 10 juin 2012
27 juin 2010 à 12:53
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
0
bm1982 Messages postés 58 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 10 juin 2012
27 juin 2010 à 14:48
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' ";
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 juin 2010 à 18:09
C'est nettement mieux. Le stripslashes ne sert à rien.

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


Cordialement,


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