Proteger son include avec un mot de passe
Résolu/Fermé
Baltazarius
-
10 mai 2009 à 19:46
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 - 12 mai 2009 à 21:35
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 - 12 mai 2009 à 21:35
A voir également:
- Proteger son include avec un mot de passe
- Proteger un dossier avec mot de passe - Guide
- Voir mot de passe wifi android - Guide
- Mot de passe administrateur - Guide
- Trousseau mot de passe iphone - Guide
- Identifiant et mot de passe - Guide
13 réponses
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
11 mai 2009 à 13:23
11 mai 2009 à 13:23
Bonjour,
Tu as mis le doigt en plein sur LA faille include. Il faut comprendre comment marche le .htaccess. En fait, il intervient directement au niveau du serveur Apache. Apache, c'est le programme qui envoie les pages au navigateur du visiteur. Avec ton .htaccess, Apache n'enverra pas la page au visiteur. Par contre, PHP, qui est éxécuté dans ta page index.php n'a aucune restriction. Ce n'est donc pas le visiteur qui va chercher la page bloquée, mais PHP. Apache envoie ensuite la page index.php remplie avec le contenu. Le problème donc, empécher l'accès des pages non désirées à PHP.
Par contre, au vu de ton code, je ne vois pas vraiment ton soucis, puisque tu semble vouloir inclure cette page. Ca marche donc. Par contre, dans ton cas, il semble que tu inclues la variable $_GET['page'] aussi dans ton code.
Qu'est ce que tu veux faire éxactement? Que fait ton code actuel?
Tu as mis le doigt en plein sur LA faille include. Il faut comprendre comment marche le .htaccess. En fait, il intervient directement au niveau du serveur Apache. Apache, c'est le programme qui envoie les pages au navigateur du visiteur. Avec ton .htaccess, Apache n'enverra pas la page au visiteur. Par contre, PHP, qui est éxécuté dans ta page index.php n'a aucune restriction. Ce n'est donc pas le visiteur qui va chercher la page bloquée, mais PHP. Apache envoie ensuite la page index.php remplie avec le contenu. Le problème donc, empécher l'accès des pages non désirées à PHP.
Par contre, au vu de ton code, je ne vois pas vraiment ton soucis, puisque tu semble vouloir inclure cette page. Ca marche donc. Par contre, dans ton cas, il semble que tu inclues la variable $_GET['page'] aussi dans ton code.
Qu'est ce que tu veux faire éxactement? Que fait ton code actuel?
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
11 mai 2009 à 20:45
11 mai 2009 à 20:45
Ok. J'ai pas tout potassé, mais grosso modo, là ou je voulais en venir, ça y est =).
Les variables de session, tu connais? Si tu ne connais pas, alors va faire un tour sur le site du zéro: https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/913348-variables-superglobales#ss_part_2
Une fois que tu as compris, tu choisis une variable de session qui n'existe que si l'utilisateur est connecté, ou si c'est toi (il y en a plusieurs, prend celle que tu veux). Ensuite, il te suffit de tester si elle existe ou non (ce qui reviendra à tester si l'utlisateur est connecté ou non). Pour ça, je te conseille la documentation php, et la fonction "isset" : https://www.php.net/isset
Pour ce qui est sécurisation, il faudra qu'on en parle en pv, puisqu'il est interdit de parler des techniques d'attaque ici. Mais je me tiendrais à ta disposition.
Les variables de session, tu connais? Si tu ne connais pas, alors va faire un tour sur le site du zéro: https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/913348-variables-superglobales#ss_part_2
Une fois que tu as compris, tu choisis une variable de session qui n'existe que si l'utilisateur est connecté, ou si c'est toi (il y en a plusieurs, prend celle que tu veux). Ensuite, il te suffit de tester si elle existe ou non (ce qui reviendra à tester si l'utlisateur est connecté ou non). Pour ça, je te conseille la documentation php, et la fonction "isset" : https://www.php.net/isset
Pour ce qui est sécurisation, il faudra qu'on en parle en pv, puisqu'il est interdit de parler des techniques d'attaque ici. Mais je me tiendrais à ta disposition.
Bonsoir, merci cette réponse m'aide énormément à comprendre comment marche htacces et le serveur Apache.
(Effectivement je me suis trompé dans l'adresse, ce n'est pas "page" mais bien "p" de cette sorte: http://monsite.fr/index.php?p=administration)
Je souhaite sécuriser l'accès à une page tant bien que pars l'accès au dossier directe, tant que par l'accès à mon "include". A ce moment là il vaut peut être mieux créer une page de connexion traité directement par le php, ou bien les deux, ou encore autrement ?
Si c'est le cas, j'ose espérer que vous m'orientiez vers un tuto, ou vous même m'expliquiez la façon la plus sécuriser possible de créer des comptes en php.
J'ai cherché comment sécuriser une page avec du php mais j'ai peur que ça soit beaucoup trop facilement "crackable".
Je vous en remercie.
(Effectivement je me suis trompé dans l'adresse, ce n'est pas "page" mais bien "p" de cette sorte: http://monsite.fr/index.php?p=administration)
Je souhaite sécuriser l'accès à une page tant bien que pars l'accès au dossier directe, tant que par l'accès à mon "include". A ce moment là il vaut peut être mieux créer une page de connexion traité directement par le php, ou bien les deux, ou encore autrement ?
Si c'est le cas, j'ose espérer que vous m'orientiez vers un tuto, ou vous même m'expliquiez la façon la plus sécuriser possible de créer des comptes en php.
J'ai cherché comment sécuriser une page avec du php mais j'ai peur que ça soit beaucoup trop facilement "crackable".
Je vous en remercie.
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
11 mai 2009 à 19:30
11 mai 2009 à 19:30
Au vu de ton code pourtant, il semble que tu veuille donner l'accès à cette page via l'include. Ou alors, tu veux que seulement certains utilisateurs y aient accès? Dans tous les cas, garde TOUJOURS la méthode du switch sur un include. Ca te permet de gérer individuellement chaque éventualité prévue. Alors dans un premier temps, on va faire fonctionner ça. Ensuite, on passera à la sécurisation. Donc par qui, et comment ta page doit-elle être accessible? Et donne la source complète de la page s'il te plait. (Par contre, tu as des balises "code" à coté des balises de mise en forme du texte quand tu poste sur le forum, pour que ça soit plus lisible.
(Faut qu'on règle ça ce soir, sinon ça remet ça à demain soir.. pas possible demain dans la journée)
(Faut qu'on règle ça ce soir, sinon ça remet ça à demain soir.. pas possible demain dans la journée)
Bonsoir, merci de m'aider !Je ne vois pas comment on peut (par include) donner l'accès publique/privé ? En tout cas je veux que la page soit accessible par des membres inscrit ou moi enfin peu importe il faut seulement qu'elle soit protégé par mot de passe et login.
PS: le pun root c'est pour un forum PUNBB que j'utilise à partir de ma page pour se connecter directement ..
MERCI !
PS: le pun root c'est pour un forum PUNBB que j'utilise à partir de ma page pour se connecter directement ..
MERCI !
<?php session_start(); define('PUN_ROOT', './forum/'); require PUN_ROOT.'include/common.php'; require_once('includes/config.php'); mysql_connect($serveur_mysql, $user_mysql, $pass_mysql); mysql_select_db($bdd_mysql); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> <head> <title>mon site</title> <meta name="Description" content="mon site"/> <meta name="Keywords" content="mon site"/> <meta name="Author" content="moi"/> <meta name="Copyright" content="mon site"/> <meta name="Content-language" content="fr"/> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1;" /> <link rel="stylesheet" type="text/css" href="style/style.css" /> <script type="text/javascript" src="/java/nextlan.js"></script> </head> <body onLoad="disp_delai()"> <div id="header"> <div id="header_title"> </div> <table width="100%" cellpadding="0" cellspacing="0"> <tr> <td width="140px" valign="top"> <div id="left"> <?php if($pun_user['username'] == "" or $pun_user['username'] == "Guest"){ echo "<div id=\"login\">"; ?> <form method="post" action="forum/login.php?action=in"> <input type="hidden" name="form_sent" value="1" /> <input type="hidden" name="redirect_url" value="../index.php" /> <input type="text" name="req_username" id="login_form" /> <input type="password" name="req_password" id="password" /> <input type="submit" id="submit" value="Se connecter" /> </form> <?php }elseif($pun_user['username'] != "Guest"){ echo "<div id=\"logged\">"; echo "<strong>Bonjour ".$pun_user['username']; echo "<br />Dernière visite le<br />".date("d M Y - H:i:s",$pun_user['last_visit'])."</strong>"; echo "<br /><a id=\"logged\" href=\"forum/login.php?action=out&id=".$pun_user['id']."\">Déconnexion</a>"; } ?> </div> <div id="navigation"> <br /> <?php $retour = mysql_query('SELECT * FROM navigation'); $donnees = mysql_fetch_array($retour); echo stripslashes($donnees['value']); ?> </div> </div> </td> <td align="center" valign="top"> <div id="center"> <?php if(!isset($_GET['p'])){ ?> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td><div id="last_news"><br /><br /><br /> <?php $retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 9'); while ($donnees = mysql_fetch_array($retour)) { echo "<a id=\"logged\" href=\"index.php?p=news&id=".$donnees['id']."\">".nl2br(stripslashes($donnees['titre']))."</a><br />"; } ?> </div></td> <td><img src="images/lans_01.png" width="35" height="209" alt="" /></td> <td style="background-image:url('images/lans_02.png');" height="209" width="100%"><div id="cadre_haut"><?php include('includes/cadre_haut.php'); ?></div></td> <td><img src="images/lans_04.png" width="34" height="209" alt="" /></td> </tr> </table> <table width="100%" style="height:100%;" border="0" cellpadding="0" cellspacing="0"> <tr> <td> <img src="images/content_01.png" width="45" height="28" alt="" /></td> <td style="background-image:url('images/content_02.png');" width="100%"></td> <td colspan="2"> <img src="images/content_03.png" width="34" height="28" alt="" /></td> </tr> <tr> <td style="background-image:url('images/content_04.png');" height="100%"></td> <td style="background-image:url('images/content_05.png');" width="100%"> <div align="center"> <img src="images/news.png" alt="" /> <!-- Script de news --> <?php $retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 4'); while ($donnees = mysql_fetch_array($retour)) { ?> <h3> <?php echo nl2br(stripslashes($donnees['titre']));?> </h3> <p> <?php $contenu = nl2br(stripslashes($donnees['contenu'])); echo $contenu."<br /><br /><em>Ecrit par <font color=\"red\">".$donnees['auteur']."</font> le ".date('d/m/Y', $donnees['timestamp'])."</em>"; ?> </p> <hr /> <?php } ?> <!-- Fin Script de news --> </div> </td> <td style="background-image:url('images/content_06.png');" width="34" height="100%"></td> </tr> <tr> <td> <img src="images/content_08.png" width="45" height="33" alt="" /></td> <td style="background-image:url('images/content_09.png');" width="100%"></td> <td colspan="2"> <img src="images/content_10.png" width="34" height="33" alt="" /></td> </tr> </table> <?php } else{ ?> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td> <img src="images/content-01.png" width="45" height="44" alt="" /></td> <td style="background-image:url('images/content-04.png');" width="100%"></td> <td colspan="2"> <img src="images/content-03.png" width="34" height="44" alt="" /></td> </tr> <tr> <td style="background-image:url('images/content_04.png');" height="100%"></td> <td style="background-image:url('images/content_05.png');" width="100%"> <div align="center"> <!-- Include --> <?php $p=$_GET['p']; switch ($p) { case 'news': include('includes/news.php'); break; case 'administration': include('includes/admin/index.php'); break; default: include('includes/erreur.php'); } ?> <!-- Include --> </div> </td> <td style="background-image:url('images/content_06.png');" height="100%"></td> </tr> <tr> <td> <img src="images/content_08.png" width="45" height="33" alt="" /></td> <td style="background-image:url('images/content_09.png');" width="100%"></td> <td colspan="2"> <img src="images/content_10.png" width="34" height="33" alt="" /></td> </tr> </table> <?php } ?> </div> <table width="100%" cellpadding="0" cellspacing="0"> <td width="right" valign="top"> <div id="right"> <div id="pub"> <br /> <?php $retour = mysql_query("SELECT * FROM pub") or die ("Pb requette: ".mysql_error()); $donnees = mysql_fetch_array($retour); echo stripslashes($donnees['value']); ?> </div> </table> </td> </tr> </table> </body> </html>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci, pour ça je vais m'inscrire.
Je suis en train de suivre le tuto du site du zero que vous m'avez passé.
Si j'ai bien compris il va falloir que j'insère dans ma variable ma page ?
comme ça ? $_SESSION['login&pwd'] = 'le contenu';
Je ne vois pas bien comment y venir autrement ?
Merci.
Je suis en train de suivre le tuto du site du zero que vous m'avez passé.
Si j'ai bien compris il va falloir que j'insère dans ma variable ma page ?
comme ça ? $_SESSION['login&pwd'] = 'le contenu';
Je ne vois pas bien comment y venir autrement ?
Merci.
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
11 mai 2009 à 21:04
11 mai 2009 à 21:04
Ow mais je viens de voir.. Le code est de toi? Parce que l'array $pun_user n'est pas défini, a moins que ta page soit inclue? Et a quoi sert le "session_start() ?
Oui, mon pun user me sert seulement pour PunBB( les forums gratuit). Et le pun user c'est une session enfaite je connais les sessions ^^ désolé.
Cette session est faite pour le forum punBB comme ça de la page d'accueil je peux me connecter à mon forum.
Mais ça ce n'est pas important ...
Cette session est faite pour le forum punBB comme ça de la page d'accueil je peux me connecter à mon forum.
Mais ça ce n'est pas important ...
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
11 mai 2009 à 21:13
11 mai 2009 à 21:13
Ok... Je vois, et les users qui auront accès a ta page seront connectés aussi à la base de donnée du forum?
je suppose que ça risque d'être trop compliqué. Quoi que, en reprenant les mêmes variables ça doit être faisable non ? =)
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
11 mai 2009 à 21:47
11 mai 2009 à 21:47
Et oui! Un exemple simple. A chaque début de page, tu teste par exemple la variable $_SESSION['id']
Bien sur, si la personne est pas connectée, $connected sera false, mais si tes variables de session sont définies, alors $connected sera true.
Il suffit juste de reprendre les variables du forum, et de garder des session_start() sur toutes tes pages =)
<?php if (isset($_SESSION['id'])) { $connected = true; } else { $connected = false; } ?>
Bien sur, si la personne est pas connectée, $connected sera false, mais si tes variables de session sont définies, alors $connected sera true.
Il suffit juste de reprendre les variables du forum, et de garder des session_start() sur toutes tes pages =)
Merci, oui je n'avais pas vu ça comme ça !
Mais à ce moment là comment on peut donner des niveau de droit. Administrateur Moderateur ? Je dois créer une variable à chaque fois ?
id_admin id_mod ?
MErci
Mais à ce moment là comment on peut donner des niveau de droit. Administrateur Moderateur ? Je dois créer une variable à chaque fois ?
id_admin id_mod ?
MErci
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
11 mai 2009 à 22:05
11 mai 2009 à 22:05
Une variable de session qui reprend le niveau =) (pour ça faut que tu fouille dans les sources du forum, ça existe déjà, puisque les modérateurs ont pas les mêmes droit que les admin :p )
Je sais pas comment c'est fait exactement, mais c'est dedans, c'est sur =)
Je sais pas comment c'est fait exactement, mais c'est dedans, c'est sur =)
OKi merci je vais me coucher, en tout cas merci grandement de ton aide.
Bonne soirée et je finirais un peu plus tard =)
Bonne soirée et je finirais un peu plus tard =)
Bonsoir! Alors merci je vois comment faire mais je bute bêtement ( surement ) sur ce problème:
Alors je met ma page d'administration:
Mais je ne vois pas comment récupérer ma variable ID ?
Merco
Alors je met ma page d'administration:
<?php session_start(); if (isset($_SESSION['id'])) { $connected = true; ?> <p>Le contenu</p> <?php } else { $connected = false; ?> <p>Vous devez être connecté pour pouvoir accéder à cette page !</p> <?php } ?>
Mais je ne vois pas comment récupérer ma variable ID ?
Merco
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
12 mai 2009 à 19:08
12 mai 2009 à 19:08
Je ferais plutôt comme j'avais dis, dans un premier temps, la valeur de la variable $connected, et dans un second temps
Mais c'est une question de façon de faire après, ça reste correct. Pour que ta variable $_SESSION['id'] soit initialisée, il suffit de lui donner une valeur lors de la connection. Normalement, c'est l'id du membre dans la base de donnée du forum.
<?php if ($connected) { echo "contenu de la page"; } else { echo "vous devez être connecté"; } ?>
Mais c'est une question de façon de faire après, ça reste correct. Pour que ta variable $_SESSION['id'] soit initialisée, il suffit de lui donner une valeur lors de la connection. Normalement, c'est l'id du membre dans la base de donnée du forum.
Wouaw, Merci bcp je m'éclate, rien de plus fabuleux que les $_session enfaite, j'avais pas vu ça comme ça !
Merci, j'ai réussis à protéger toute mes pages comme ça.
Je vous recontacte bientôt pour parler plus sérieusement de la sécurité :p
Merci vraiment !
Bonne soirée.
Merci, j'ai réussis à protéger toute mes pages comme ça.
Je vous recontacte bientôt pour parler plus sérieusement de la sécurité :p
Merci vraiment !
Bonne soirée.
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
12 mai 2009 à 21:35
12 mai 2009 à 21:35
Marque le sujet comme résolu, et contacte moi en mp a ce sujet =)