script login-mot de passe

Eléphanteau du PHP | 17 Messages

08 avr. 2010, 12:30

Bonjour :o


Je cherche à rendre une page internet accessible seulement après avoir entré un identifiant et un mot de passe.


Je tenais à faire le script moi même alors je n'ai pas regardé de scripts tous faits, du coup comme je débute j'imagine que mon script est perfectible même s'il fonctionne bien, le voici:

(pour l'exemple j'ai choisi comme identifiant "admin" et comme mot de passe "voiture", qui correspondent respectivement aux champs "identifiant" et "pass" du formulaire, si l'identifiant et le pass sont bons, ça redirige vers "maj.php" )

Code : Tout sélectionner

<?php if(!$_POST["identifiant"] && !$_POST["pass"]){ echo "Veuillez remplir les champs s'il vous plait."; } elseif(!$_POST["identifiant"]){ echo "Veuillez entrer votre identifiant s'il vous plaît"; } elseif(!$_POST["pass"]){ echo "Veuillez entrer votre mot de passe s'il vous plaît"; } elseif($_POST["identifiant"]!="admin" || $_POST["pass"]!="voiture" ){ echo "Vous avez entré un mauvais identifiant et/ou un mauvais mot de passe."; } else{ header("location: maj.php" ); } ?>
Est-ce que ça vous semble protéger la page internet?


Autre question: A partir du moment ou une page est nommée en .php, et que le site internet ne contient aucun lien dirigeant vers cette page, excepté via un header dans du code php sous certaines conditions, la page est-elle téléchargeable par les aspirateurs de site?

Merci :!:

Mammouth du PHP | 661 Messages

08 avr. 2010, 12:55

par les "aspirateurs de site" ... si il ne la connaissent pas ... non ... à moins qu'il la devine ;) ...

sinon, ça marche !? ... mais qu'en est il si l'internaute vas directement sur la page maj.php en tapant directement dans l'url !??

pour sécuriser une page, passes par des session et/ou un htacess ;)
http://fr.php.net/manual/fr/book.session.php
http://www.securiteinfo.com/conseils/htaccess.shtml

@++

VaN
Mammouth du PHP | 1107 Messages

08 avr. 2010, 12:59

Disons que tu as la base, mais ton script n'est pas vraiment au point.

Déjà, il ne permet pas de gérer plusieurs comptes, via une base de données. Si c'est pour accéder à une page que tu dois être le seul à pouvoir voir, ça va. Mais si c'est pour un espace membre, ça ne va plus.

De plus, l'accès à ta page maj.php n'est au final pas du tout sécurisé. Que se passe t-il su un utilisateur tente d'afficher http://www.tonsite.com/maj.php ? Et bien aucun contrôle n'est fait. Il affiche la page correctement.

Dans ta page maj.php, il faut que tu vérifie qu'une session à bien été créée sur ta page de sécurité. Et sur ta page de sécurité, une fois que le test de login/mot de passe est correct, avant de rediriger vers maj.php, il faut que tu créés cette session, ainsi :
session_start();
$_SESSION["authed"] = true;
Ensuite, sur ta page maj.php, tu vérifie qu'une session est ouverte :
session_start(); // à mettre tout en haut de ta page maj.php
if(isset($_SESSION["authed"]) && $_SESSION["authed"] === true) {
// C'est bon
}
else {
// Aucune session n'est ouverte, ca signifie que l'utilisateur à afficher la page maj.php directement via son navigateur, on le redirige vers la page d'identification
}

Eléphanteau du PHP | 17 Messages

08 avr. 2010, 13:01

Merci beaucoup pour vos réponses :D

C'est vrai pour le coup de l'url, j'y avais pas pensé, ça mérite d'apprendre à faire des sessions. :oops:

Je vais manger et lire après tes explications VaN, je reviendrais ptet si j'ai une question :mrgreen:

VaN
Mammouth du PHP | 1107 Messages

08 avr. 2010, 13:27

Merci beaucoup pour vos réponses :D

C'est vrai pour le coup de l'url, j'y avais pas pensé, ça mérite d'apprendre à faire des sessions. :oops:

Je vais manger et lire après tes explications VaN, je reviendrais ptet si j'ai une question :mrgreen:
Une fois que tu auras assimilé le système de sessions, et que tu as réussi à en faire une fonctionne, tu es prêt à t'attaquer à un vrai espace membre sécurisé, avec une base de données utilisateurs. Bonne chance : )

ViPHP
AB
ViPHP | 5818 Messages

08 avr. 2010, 16:06

Il y a un tuto complet sur le sujet à cette adresse.

Eléphanteau du PHP | 17 Messages

08 avr. 2010, 17:56

Merci AB pour le lien vers le tutoriel, par contre je suis assez largué quand je le lis, pas mal de fonctions que je ne connais pas, il va falloir que je l'appréhende doucement le temps de tout ingérer :idea:

J'ai utilisé ta méthode Van et ça marche très bien, il me reste à trouver comment faire un bouton de déconnexion (j'ai l'impression que la connexion reste active sinon, je me trompe?), je fais une petite recherche sur le net ça doit pas être bien compliqué ;)

edit: Bon en fait il semblerait que PHP tue automatiquement la session après un certain temps d'inactivité :priere:

Eléphant du PHP | 428 Messages

08 avr. 2010, 18:32

edit: Bon en fait il semblerait que PHP tue automatiquement la session après un certain temps d'inactivité :priere:

Mieux vaut contrôler tes sessions du début jusqu'à la fin...

1. On initialise les sessions => sessions_start();
2. On crée les sessions => $_SESSION['nomdelasession'] = 'valeur de la session';
3. On teste la ou les sessions => if ($_SESSION['nomdelasession'] == 'valeur de la session') { ...
4. On tue la session => $_SESSION = array(); session_destroy();

Le fait de laisser "mourrir" tes sessions naturellement (par le serveur) peut être dangereux : question de sécurité.

Tu peux également intégrer un contrôle de la durée d'expiration des session (timeout session côté serveur) :
<?php
ini_set('session.gc_maxlifetime', 3600); // Valeur en secondes
session_start();
...
?>


A+

VaN
Mammouth du PHP | 1107 Messages

08 avr. 2010, 19:32

4. On tue la session => $_SESSION = array(); session_destroy();
Je remplacerai même le $_SESSION = array(); par un session_unset(), qui est fait pour ça, ce qui donne :
session_unset();
session_destroy();
Noobinside, Pour gérer une fermeture de session, rien de plus simple :
<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?session_destroy=true">Déconnexion</a>
Puis, en haut de chaque page du site (conseil : le mieux est de le mettre dans un fichier à part, que tu include() en haut de chaque page, et qui te permet de faire des traitements récurrents à chaque page, comme la gestion de la deconnexion, et d'autres choses.) :
if(isset($_GET["session_destroy"]) && $_GET["session_destroy"] == "true") {
    session_unset();
    sesion_destroy();
    header("Location: login.php");
    exit();
}

Eléphanteau du PHP | 17 Messages

08 avr. 2010, 19:36

merci bien je vais essayer ça ce soir, ça tombe bien j'ai appris les include hier :D Bonne soirée à vous ;)

ViPHP
AB
ViPHP | 5818 Messages

09 avr. 2010, 02:45

Merci AB pour le lien vers le tutoriel, par contre je suis assez largué quand je le lis, pas mal de fonctions que je ne connais pas, il va falloir que je l'appréhende doucement le temps de tout ingérer :idea:
Prends ton temps mais à part deux lignes qui sont pour travailler en utf-8 (que tu peux supprimer si tu travaille en ISO...) et la fonction trim que j'emploie pour supprimer les espaces vides en début et en fin de chaine, tout le reste est le strict minimum à assimiler pour avoir une structure de code fonctionnel et portable (ie qui peut fonctionner sur pratiquement tous les serveurs).
Donc si tu arrives à faire plus simple c'est pas forcément bon signe :wink: ... excepté bien sûr si tu inscris tes login et mots de passe en dur dans la page auquel cas la création de table et la connexion à la bdd est inutile (mais la bdd est la façon habituelle de faire, la plus sûre et celle qui offre le plus d'évolutivité)

En complément, la fonction pour supprimer la session est une bonne idée.

Eléphanteau du PHP | 17 Messages

09 avr. 2010, 14:38

Merci AB pour le lien vers le tutoriel, par contre je suis assez largué quand je le lis, pas mal de fonctions que je ne connais pas, il va falloir que je l'appréhende doucement le temps de tout ingérer :idea:
Prends ton temps mais à part deux lignes qui sont pour travailler en utf-8 (que tu peux supprimer si tu travaille en ISO...) et la fonction trim que j'emploie pour supprimer les espaces vides en début et en fin de chaine, tout le reste est le strict minimum à assimiler pour avoir une structure de code fonctionnel et portable (ie qui peut fonctionner sur pratiquement tous les serveurs).
Donc si tu arrives à faire plus simple c'est pas forcément bon signe :wink: ... excepté bien sûr si tu inscris tes login et mots de passe en dur dans la page auquel cas la création de table et la connexion à la bdd est inutile (mais la bdd est la façon habituelle de faire, la plus sûre et celle qui offre le plus d'évolutivité)

En complément, la fonction pour supprimer la session est une bonne idée.
Oui j'ai l'intention d'apprendre, c'est juste que je suis pas un rapide (disons que je comprends vite mais qu'il faut m'expliquer longtemps :D ) du coup j'ai besoin de comprendre exactement ce qui se passe à chaque ligne de code et ça peut me prendre quelques heures pour être sûr de maîtriser les concepts, mais j'y viens :idea:

Eléphanteau du PHP | 17 Messages

09 avr. 2010, 17:05

4. On tue la session => $_SESSION = array(); session_destroy();
Je remplacerai même le $_SESSION = array(); par un session_unset(), qui est fait pour ça, ce qui donne :
session_unset();
session_destroy();
Noobinside, Pour gérer une fermeture de session, rien de plus simple :
<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?session_destroy=true">Déconnexion</a>
Puis, en haut de chaque page du site (conseil : le mieux est de le mettre dans un fichier à part, que tu include() en haut de chaque page, et qui te permet de faire des traitements récurrents à chaque page, comme la gestion de la deconnexion, et d'autres choses.) :
if(isset($_GET["session_destroy"]) && $_GET["session_destroy"] == "true") {
    session_unset();
    sesion_destroy();
    header("Location: login.php");
    exit();
}
J'ai essayé ton code et ça marche très bien, la page n'est plus accessible une fois qu'on a cliqué sur déconnexion. Je connaissais pas $_SERVER["PHP_SELF"], très pratique :!: (ps: une ptite faute à "sesion_destroy", il manque un s, je le signale au cas où quelqu'un utiliserait ton script en faisant copier collé ;) )