IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Accès direct à la page protégée possible


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Accès direct à la page protégée possible
    Bonsoir tout le monde,

    Je rencontre actuellement un petit problème dans la conception de mon site web et j'aurais aimé vous demander votre aide, si bien entendu vous avez le temps. Alors voilà le problème, j'essaye simplement de protéger une page via les sessions, cependant la page "protégée" est accessible si l'on tape son nom dans le navigateur, et j'aurai aimé savoir pourquoi, étant donné que selon moi mon code est valide. Voici sans plus attendre le code:

    Mon formulaire fait appel à auth.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php 
    session_start();
    $regex1 = "[\^'$()*+<>?#\"{}\\]";
    $regex2 = "[\^'$()*+<>?#\"{}\\]";
    $id = $_POST['login'];
    $password = $_POST['password'];
     
    $idsql = mysql_escape_string($id);
    $passsql = mysql_escape_string($password);
     
    require('config.php');
     
    if(isset($_POST['login'])) 
    { 
     
    	if(eregi($regex1,$_POST['login']) OR eregi($regex2,$_POST['password'])) 
    	{ 
     
    	echo 'Pas de caractères spéciaux'; 
    	exit;
    	} 
    	else 
    	{ 
     
    	mysql_connect($serveur,$log,$password) OR die('Erreur de connexion mysql'); 
    	mysql_select_db($nom_base);
    	$requete="SELECT COUNT(*) FROM Membre WHERE login='".$_POST['login']."' AND password='".$_POST['password']."'";
    	$res=mysql_query($requete) OR die('Erreur de connexion mysql'.mysql_error()); ; 
    	$r=mysql_fetch_row($res);
    	$nb_total=mysql_result($res,0,"count(*)");
     
     
    		if($r[0]==1) 
    		{ 
    		$_SESSION['login']=$_POST['login'];
    		?>
     
    			<script language="JavaScript">
    			document.location.href="admin.php";
    			</script>
    		<?php 
    		exit; 
    		} 
     
    		else{
    			echo '<strong>Erreur:</strong> Vos identifiants n\'ont pas été trouvés dans notre base de données.<br /><br />'; 
    ?> <a href="root.php" title="Retour à la page d'authentification">Retour à la page d\'authentification </a>
    <?php
     
    		}
    	} 
    } 
    else 
    {
    echo '<strong>Erreur:</strong> Vos identifiants n\'ont pas été trouvés dans notre base de donnée.<br /><br />'; 
    ?> <a href="root.php" title="Retour à la page d'authentification">Retour à la page d\'authentification </a>
    <?php
    } 
     
    ?>
    Oui la sécurité n'est pas encore optimale, mais j'y viendrais dès que ce problème est résolu.

    Et voilà ma page protégée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php 
     
    require('config.php');
    session_start();
    mysql_connect($serveur,$log,$password);
    mysql_select_db($nom_base); 
     
     
    if(!isset($_SESSION['login'])) 
    { 
    header('location:root.php'); 
    exit; 
    } 
     
     
    include 'header.php';
    include 'addform.php';
    include 'footer.php';
    ?>
    (avec root.php : page ou l'on doit s'identifier).


    Donc l'identification fonctionne bien, le seul problème est que je peux accéder à admin.php en tapant dans la barre d'adresse, et je ne vois pas pourquoi, étant donné que j'ai mis une condition....


    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est dommage d'utiliser la fonction mysql_escape_string (au passage maintenant il faut utiliser mysql_real_escape_string) pour au final mettre directement la variable $_POST dans ta requête.

    Pour le reste, as-tu controlé ce qu'il y avait de $_SESSION dans le cas ou tu dis accéder à la page sans t'être authentifié ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je compte utiliser mes variables déclarées avec escape_string, c'est d'ailleurs la prochaine étape, mais pour l'instant je me focalise sur ce problème...

    Alors pour te répondre, oui j'ai essayé d'afficher la variable de session lorsque je tape directement .......admin.php dans la barre d'adresse, et il me renvoie la valeur de la variable de session avec le login "admin", ce qui n'est pas normal justement.... J'ai essayé de vider le cache mais ça n'a rien fait. Comment ce fait-il qu'une session soit crée alors que je ne tape rien ? O.o


    Problème résolu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php 
     
    require('config.php');
    session_start();
    mysql_connect($serveur,$log,$password);
    mysql_select_db($nom_base); 
     
     
    if(!isset($_SESSION['login'])) 
    { 
    header('location:root.php'); 
    exit; 
    } 
     
    else {
    echo $_SESSION['login'];
    include 'header.php';
    include 'addform.php';
    include 'footer.php';
    unset ($_SESSION['login']);
    }
    ?>
    En fait il gardait ma session en mémoire...Enfin je pense...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Désolé du double-post, je vais profiter de mon topic pour poser une autre question, puisque maintenant c'est sur les mysql_real_escape_string que j'ai un problème, hihi.

    Voici ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete=sprintf("SELECT COUNT(*) FROM Membre WHERE login='%s' AND password='%s'", mysql_real_escape_string($id), mysql_real_escape_string($password));
     
    	$res=mysql_query($requete) OR die('Erreur de connexion mysql'.mysql_error()); ;

    Le problème, c'est que maintenant il me dit à chaque fois que mon login/mdp est non valide (login:admin / mdp: admin).

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Points : 72
    Points
    72
    Par défaut
    Tu pourras vider ton cache autant que tu le souhaite les sessions ne sont pas stockées chez le client (heureusement).

    Pour le problème sur ta requête montre le reste du code.

    mysql_real_escape_string ne doit pas poser problème car il ne fait que backslashs les côtes et guillemets, à moins que ton login et password ne comporte un de ces derniers vérifie les magics quotes.

  6. #6
    Invité
    Invité(e)
    Par défaut
    D'accord je prends note (j'y connais pas grand chose..)

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php 
    session_start();
    $regex1 = "[\^'$()*+<>?#\"{}\\]";
    $regex2 = "[\^'$()*+<>?#\"{}\\]";
    $id = $_POST['login'];
    $password = $_POST['password'];
     
     
     
    require('config.php');
     
    if(isset($_POST['login'])) 
    { 
     
    	if(eregi($regex1,$_POST['login']) OR eregi($regex2,$_POST['password'])) 
    	{ 
     
    	echo 'Pas de caractères spéciaux'; 
    	exit;
    	} 
    	else 
    	{ 
     
    	mysql_connect($serveur,$log,$password) OR die('Erreur de connexion mysql'); 
    	mysql_select_db($nom_base);
    	$requete=sprintf("SELECT COUNT(*) FROM Membre WHERE login='%s' AND password='%s'", mysql_real_escape_string($id), mysql_real_escape_string($password));
     
    	$res=mysql_query($requete) OR die('Erreur de connexion mysql'.mysql_error()); ; 
    	$r=mysql_fetch_row($res);
    	$nb_total=mysql_result($res,0,"count(*)");
     
     
    		if($r[0]==1) 
    		{ 
    		$_SESSION['login']=$_POST['login'];
     
     
    header('location:admin.php');
    //			<script language="JavaScript">
    //			document.location.href="admin.php";
    //			</script>
     
    		exit; 
    		} 
     
    		else{
    			echo '<strong>Erreur:</strong> Vos identifiants n\'ont pas été trouvés dans notre base de données.<br /><br />'; 
    ?> <a href="root.php" title="Retour à la page d'authentification">Retour à la page d\'authentification </a>
    <?php
     
    		}
    	} 
    } 
    else 
    {
    echo '<strong>Erreur:</strong> Vos identifiants n\'ont pas été trouvés dans notre base de donnée.<br /><br />'; 
    ?> <a href="root.php" title="Retour à la page d'authentification">Retour à la page d\'authentification </a>
    <?php
    } 
     
    ?>
    A noter que cela fonctionnait très bien avant que j'ajoute la fonction real_escape truc ^^

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Points : 72
    Points
    72
    Par défaut
    mysql_real_escape_string ne fait que backslash les guillemets et cotes, ce que tu interdits via ton expression régulière donc je ne vois pas où il pourrait poser problème.

    Sinon rien à voir avec ton problème mais fait attention tu initialise la variable $id avec $_POST['login'] avant même de tester son existence, idem avec $password.

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'ai pris en compte ta remarque concernant l'initialisation des variables et ai corrigé le problème. Cependant en ce qui concerne l'identification, toujours rien de neuf, voilà ce que j'obtiens lorsque je rentre le login/mdp de l'admin:

    Erreur: Vos identifiants n'ont pas été trouvés dans notre base de données.

    Retour à la page d\'authentification
    Je sêche :/

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    affiche $requete pour controler ce que tu fais.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ahaha quel boulet je suis.... $password c'était la variable de mon fichier config.php, à savoir le mdp pour accéder à ma base de données... Merci du tuyau qui consistait à afficher la requête :-)

  11. #11
    OPi
    OPi est déconnecté
    Membre actif
    Avatar de OPi
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Août 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : en recherche d'emploi
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 74
    Points : 245
    Points
    245
    Par défaut X(HTML) correct pour JavaScript
    C'est hors propos, mais je vois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script language="JavaScript">
    dans le premier code en haut de la page ! Il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript">
    (Et dans ce contexte le code JavaScript a été remplacé justement par du code PHP plus bas dans la page.)
    DragonSoft DS (informatique) — Johnny Five JF (textes) — Olivier Pirson OPi (mathématiques)
    OPiCitationshttps://bitbucket.org/OPiMedia

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] interdire l'accès direct à une page php
    Par clem037 dans le forum Langage
    Réponses: 10
    Dernier message: 17/03/2008, 22h04
  2. [AJAX] Interdire accès direct aux pages PHP
    Par Nasky dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/07/2007, 17h28
  3. Enlever accès direct aux pages avec struts
    Par Verboz dans le forum Struts 1
    Réponses: 7
    Dernier message: 09/05/2007, 15h29
  4. Accès direct à la page impossible (membres seulement)
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/02/2006, 20h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo