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

Apache Discussion :

authentification serveur HTTP [Fait]


Sujet :

Apache

  1. #1
    Membre à l'essai
    Homme Profil pro
    Spécialiste projets aéronautique
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Spécialiste projets aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 18
    Points
    18
    Par défaut authentification serveur HTTP
    Bonjour à tous,

    Depuis quelques mois, j'ai monté un serveur domestique.
    Maintenant après de longues nuits passées dessus, je crois comprendre 2 possibilités de sécurité, quoi que....

    Je m'explique :
    -soit je passe par l'authentification HTTP (htaccess ou par mysql).
    -soit je protège les pages par une authentification PHP, et si incorrect alors je n'affiche pas la page.

    Je pense, et vous me le confirmerez, on pourra toujours passé au travers d'une sécurité par simple codage, mais qu'est-ce qui est le plus sécurisé entre ces 2 possibilités, que je bricole sans une maitrise experte, d'où mon appel à l'aide ????

    Je suis d'avis que la sécurité par HTTP est la plus sûre mais ne me propose pas de déconnexion après un temps d'inactivité.

    Pourriez-vous me dire ce qui est le plus sécuritaire ???


    D'avance merci à tous.....

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est comme tu dis : le .htaccess (qui met en place une authentification dite basique) est le plus simple à mettre en place est le plus sûr dans le sens où toutes les pages d'un répertoire sont protégées d'un coup d'un seul, alors qu'avec une authentification PHP par formulaire et session, il faut mettre un bout de code sur chaque page (ou preque, y a moyen de faire autrement) pour s'assurer qu'on est bien authentifié. PHP est donc plus fastidieux (a priori) à mettre en place et plus sujet aux erreurs humaines. Mais il faut savoir que l'authentification basique n'est pas sûr dans le sens où à chaque requête sur une page protégée, le login et le mot de passe sont envoyés plus ou moins en clair dans la requête. Donc si qq'1 intercepte la requête, il peut découvrir le login et le mot de passe. A l'inverse, avec une authentification PHP, le login et le mot de passe transite éventuellement en clair sur le réseau mais une seule fois seulement, au moment où on poste le formulaire d'authentification (je dis éventuellement car on peut imaginer qu'on poste en fait une signature du mot de passe et pas le mot de passe directement, ce qui n'est pas faisable en authentification basique).

    Ceci dit, y a quand même moyen de faire un truc façon .htaccess avec PHP : tu utilises un bout de .htaccess pour forcer systématiquement l'appel à une page PHP sur un script "caché" qui vérifie l'authentification et au besoin redirige sur une page de login ou bien affiche la page cible. Tu peux maquetter ça assez facilement :
    1. Crée un répertoire /admin dans lequel on va mettre les pages PHP à protéger.
    2. Dans ce répertoire, crée un .htaccess qui contient le code suivant :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      RewriteEngine on
      RewriteCond %{REQUEST_URI} !verif_authent.php
      RewriteCond %{REQUEST_FILENAME} -f
      RewriteRule .* /verif_authent.php?target=%{REQUEST_URI} [QSA,L]
      Là, on fait simple : le script qui va vérifier l'authentification (verif_authent.php) se trouve à la racine du site. Tu peux le mettre n'importe où, par exemple dans un répertoire protégé par un Deny from all, mais il faudra jouer avec les chemins relatifs pour reconstruire correctement les includes.
    3. Crée la page /verif_authent.php :
      Code php : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      <?php
      @session_start();
       
      // Si la variable de session "utilisateur" n'existe pas, l'utilisateur n'est pas authentifie
      if (!isset($_SESSION["utilisateur"])) {
          // On sauve le cible en session pour éviter les réécritures d'URL
          $_SESSION["target"] = $_GET["target"];
          // On redirige vers l'ecran de login
          header("Location: http://".$_SERVER["HTTP_HOST"]."/login.php");
      } else {
          include(".".$_GET["target"]);
      }
      ?>
    4. Crée la page de login /login.php. Cette page fait une vérification du login/mot de passe et redirige vers une page cible. Par exemple :
      Code php : 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
      <?php
      @session_start();
       
      if (isset($_SESSION["target"])) {
          $target = $_SESSION["target"];
      } else {
          $target = "/index.php";
      }
       
      // On verifie l'authentification
      if (isset($_POST["login"]) && $_POST["login"] == "admin" && isset($_POST["password"]) && $_POST["password"] == "motdepasse") {
          $_SESSION["utilisateur"] = $_POST["login"];
          header("Location: http://".$_SERVER["HTTP_HOST"].$target);
      }
      ?>
      <html>
      <body>
      <form method="post">
          Login : <input type="text" name="login"><br>
          Mot de passe : <input type="password" name="password"><br>
          <input type="submit">
      </form>
      </body>
      </html>
    5. Maintenant crée les pages et les fichiers que tu veux dans /admin. Ne t'occupe pas de savoir si tu es authentifié ou quoi.
    6. Accède à l'une des pages dans /admin : si tu ne t'es pas authentifié auparavant, tu tombes sur l'écran de login. Rentre admin/motdepasse : tu obtiens ton fichier. Essaie alors d'accéder à d'autres pages ou fichier : ça marche.


    C'est un truc simple. Faut bétonner le code pour éviter les passages de paramètres foireux dans login.php, mais c'est du classique PHP.

    Une fois que tu as mis en place quelque chose dans ce genre (soit par ma méthode, soit en vérifiant en haut de chaque page que tu es authentifié, soit autre chose), je dirais que PHP et authentification basique sont plus ou moins équivalent. Le choix se fera plutôt sur des critères fonctionnels : la pop-up d'authentification n'est pas jolie, elle t'embête, et en plus ça ne gère pas de déconnexion ou de timeout, ou bien non, pas de page de login, c'est trop long à mettre en place, en plus les navigateurs n'acceptent pas tous les sessions donc ça peut ne pas marcher, etc.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre à l'essai
    Homme Profil pro
    Spécialiste projets aéronautique
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Spécialiste projets aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    à _Mac_:

    Ok, merci pour ta réponse et aussi ton exmple très concret (juste comme j'aime).

    Je suis effectivement parti sur l'idée que tu énonces à 1 truc ou 2 près.
    A savoir que ce que je suis en train de faire, est un mix des 2 solutions (popup + PHP) mais je butte sur un problème qui est l'appel de du popup.
    Je veux dire par là que je voudrai pouvoir avec un form appeler directement le pop.
    je pensais créer une fonction en PHP appelée par le action du form (mais ca ne semble pas fonctionner).

    Tu aurais une idée pour résoudre mon souci ???

    Encore une fois merci bien pour ta réponse et tes exemples....

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par berok37 Voir le message
    je pensais créer une fonction en PHP appelée par le action du form (mais ca ne semble pas fonctionner).
    Est-ce que tu peux détailler un peu, je n'ai pas bien compris

    Ce que je peux dire c'est que l'authentification par formulaire et par pop-up sont totalement incompatibles (dans le cas d'un hébergement mutualisé) car répondant à des mécanismes totalement différents : pour le pop-up, c'est le navigateur qui rajoute un en-tête HTTP supplémentaire pour indiquer le login/mot de passe qu'il chope dans ce pop-up parce que le serveur le lui à demander ; à l'inverse, pour le formulaire de login, c'est purement applicatif, le serveur ne demande rien et le navigateur ne fait que renvoyer un cookie que le serveur lui à donner un jour. Donc comme ça, sur un hébergement mutualisé, mélanger les 2 mécanismes, ce n'est pas possible, faut choisir l'un ou l'autre

    A noter que tu peux écrire un code PHP qui demande au navigateur d'ajouter l'en-tête supplémentaire (et donc d'ouvrir le pop-up) sans passer par un .htaccess. Dans ce cas, l'utilisateur rentre son login/mot de passe dans le pop-up, le navigateur envoie l'en-tête qui va bien au serveur et c'est le script PHP qui lit cet en-tête pour éventuellement créer une session.

    Je parle de l'hébergement mutualisé car il existe quand même une possibilité de mélange des genres sur un hébergement dédié, mais c'est parce que tu peux installer sur le serveur une extension au serveur Web qui présentera un formulaire de login à l'utilisateur mais qui passera l'info utilisateur à l'application comme si la personne avait rempli un pop-up (en gros, l'extension ajoute l'en-tête HTTP supplémentaire à la requête à la place du navigateur). Mais ce n'est possible que grâce à cette extension.

    Pour résumer :
    • Formulaire de login avec session sans pop-up : faisable en mutualisé et dédié. En dédié, avec l'extension dont j'ai parlé, tu peux faire en sorte que ton code PHP fonctionne comme si on était passé par un pop-up, ce qui n'est pas possible en mutualisé.
    • Pop-up sans session : faisable en mutualisé et dédié. Ce pop-up peut être ouvert par un script PHP donné sans passer par un .htaccess. Si tu passes par un script PHP pour ouvrir ce pop-up, toutes les pages protégées doivent vérifier que l'en-tête supplémentaire a été envoyé et contient le bon login.
    • Pop-up puis session : faisable en mutualisé et dédié. C'est identique au cas précédent sauf que la vérification de l'en-tête ne se fait que sur un seul script, les autres scripts ne vérifiant que la session.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre à l'essai
    Homme Profil pro
    Spécialiste projets aéronautique
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Spécialiste projets aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    a Mac,

    ok super, merci pour tes explications.


    @+++++++++++++++++++

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

Discussions similaires

  1. authentification serveur http en java
    Par ader277 dans le forum Général Java
    Réponses: 2
    Dernier message: 18/06/2012, 10h49
  2. Réponses: 3
    Dernier message: 11/03/2008, 01h14
  3. Sockets SSL ( serveur HTTPS )
    Par hexadecime dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 19/10/2007, 18h02
  4. [Net] Creation serveur HTTP en C++
    Par Yannos94 dans le forum C++
    Réponses: 13
    Dernier message: 14/11/2005, 12h05
  5. [Réseau] Headers vers un serveur http
    Par gexti dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 04/05/2004, 14h58

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