Fonction PHP

Bonjour,
J'aimerais connaitre la fonction PHP qui permet de récupérer la valeur du nom de l'utilisateur windows qui se connecte à mon site intranet?!
Configuration: Windows 2000
Firefox 2.0.0.11

23 réponses

Résumé de la discussion

Récupérer le nom de l'utilisateur Windows qui se connecte à un site intranet via PHP était la demande centrale, avec des échanges analysant les limitations et les possibilités techniques. Plusieurs répondants suggèrent que l'identification Windows via NTLM et un proxy peut influencer la récupération de ces informations, nécessitant des entêtes comme Authorization et une gestion des identifiants. D'autres indiquent que ce n'est pas directement faisable en PHP sans authentification côté serveur, et proposent des approches alternatives telles que des vérifications de proxy ou des notifications d'erreur. En pratique, des échanges montrent aussi des soucis de sessions et d'en-têtes déjà envoyés, ce qui provoque des avertissements et complexifie l'obtention d'un nom d'utilisateur fiable.

Bobot (l’IA à votre service)
  1. On vient de m'expliquer ce que fesais exactement le code que je présentait jusqu'a maintenant , et cela ne fait pas du tout ce que je veux ....
    0
    1. Ah ba merde...

      Remarque, comme ça, qu'il marche ou pas on s'en fout, c'est un avantage...
      Ça me turlupine pourtant...
      0
  2. Non, aucune chance.

    De toutes façons, cette page ,'existe plus une fois que tu cliques sur le lien...
    0
    1. J'utilise Easy-php , pour ouvrir la page test je l'ai mise dans un répertoire , et je clic sur le lien d'easy-php pour ouvrir la page test, peut etre que la session s'ouvre sur la page d'easy php administration?
      0
      1. Cela ne change rien , toujour les même erreurs a l'écran.
        0
        1. Je ne sais vraiment pas quoi te dire...

          L'erreur suivante :

          Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\test\index.php on line 4 


          Veut dire que les sessions sont déjà ouvertes... En gros, qu'un session_start existe déjà. Alors deux solution : soit la page est un include d'une autre qui a déjà un session_start, mais tu me dis que non, soit la page s'apelle elle même mais je ne vois rien de tel...

          Je suis perdu.
          0
      2. Commence par mettre en commentaire tout les lignes echo, puis enlèves le deuxième ?> en bas.
        0
        1. C'est exactement le code de ce lien :

          https://codes-sources.commentcamarche.net/

          le code :
          <?php

          session_start();

          $headers = apache_request_headers(); // Récupération des l'entêtes client

          if (@$_SERVER['HTTP_VIA'] != NULL){ // nous verifions si un proxy est utilisé : parceque l'identification par ntlm ne peut pas passer par un proxy
          echo "Proxy bypass!";
          }
          elseif($headers['Authorization'] == NULL){ //si l'entete autorisation est inexistante
          header( "HTTP/1.0 401 Unauthorized" ); //envoi au client le mode d'identification
          header( "WWW-Authenticate: NTLM" ); //dans notre cas le NTLM
          exit; //on quitte

          }

          if(isset($headers['Authorization'])) //dans le cas d'une authorisation (identification)
          {
          if(substr($headers['Authorization'],0,5) == 'NTLM '){ // on vérifit que le client soit en NTLM

          $chaine=$headers['Authorization'];
          $chaine=substr($chaine, 5); // recuperation du base64-encoded type1 message
          $chained64=base64_decode($chaine); // decodage base64 dans $chained64

          if(ord($chained64{8}) == 1){
          // |_ byte signifiant l'etape du processus d'identification (etape 3)

          // verification du drapeau NTLM "0xb2" à l'offset 13 dans le message type-1-message (comp ie 5.5+) :
          if (ord($chained64[13]) != 178){
          echo "NTLM Flag error!";
          exit;
          }

          $retAuth = "NTLMSSP".chr(000).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
          $retAuth .= chr(000).chr(040).chr(000).chr(000).chr(000).chr(001).chr(130).chr(000).chr(000);
          $retAuth .= chr(000).chr(002).chr(002).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000);
          $retAuth .= chr(000).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);

          $retAuth64 =base64_encode($retAuth); // encode en base64
          $retAuth64 = trim($retAuth64); // enleve les espaces de debut et de fin
          header( "HTTP/1.0 401 Unauthorized" ); // envoi le nouveau header
          header( "WWW-Authenticate: NTLM $retAuth64" ); // avec l'identification supplémentaire
          exit;

          }

          else if(ord($chained64{8}) == 3){
          // |_ byte signifiant l'etape du processus d'identification (etape 5)

          // on recupere le domaine
          $lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); // longueur du domain
          $offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); // position du domain.
          $domain = str_replace("\0","",substr($chained64, $offset_domain, $lenght_domain)); // decoupage du du domain

          //le login
          $lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); // longueur du login.
          $offset_login = (ord($chained64[41])*256 + ord($chained64[40])); // position du login.
          $login = str_replace("\0","",substr($chained64, $offset_login, $lenght_login)); // decoupage du login

          if ( $login != NULL){
          // stockage des données dans des variable de session
          $_SESSION['Login']=$login;
          header("Location: newpage.php");
          exit;
          }
          else{
          echo "NT Login empty!";
          }

          }
          }

          }

          ?>
          ?>
          0
          1. C'ets fou...

            Dsl mais, stp, mets moi le code en entier.
            0
            1. J'ai enlever les com. du début et fait en sorte qu'il n'y ait que du php cela me donne:

              Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\test\index.php on line 4

              Notice: Undefined index: Authorization in c:\program files\easyphp1-8\www\test\index.php on line 11

              Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:2) in c:\program files\easyphp1-8\www\test\index.php on line 12

              Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:2) in c:\program files\easyphp1-8\www\test\index.php on line 13

              En fait rien a bouger excepté le n° de ligne.
              0
              1. Essayes de virer tes commentaires au départ, juste pour voire...

                Et ta page commence tout de suite par le <?php, on est d'accord ?
                0
                1. Ca me lance le meme message qu'avant -_- :

                  Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\test\index.php on line 23

                  Notice: Undefined index: Authorization in c:\program files\easyphp1-8\www\test\index.php on line 30

                  Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:5) in c:\program files\easyphp1-8\www\test\index.php on line 31

                  Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:5) in c:\program files\easyphp1-8\www\test\index.php on line 32
                  0
                  1. J'accede a cette page a partir d'une autre , mais c'est tout.
                    0
                    1. C'est bizarre...

                      Tu es sur que c'ets vraiment la début de ta page ? cette page ne vient pas en compléter une autre ou quoi que ce soit ?
                      0
                      1. -18
                        session_start();

                        $headers = apache_request_headers(); // Récupération des l'entêtes client

                        if (@$_SERVER['HTTP_VIA'] != NULL){ // nous verifions si un proxy est utilisé : parceque l'identification par ntlm ne peut pas passer par un proxy
                        echo "Proxy bypass!";
                        }
                        elseif($headers['Authorization'] == NULL){ //si l'entete autorisation est inexistante
                        header( "HTTP/1.0 401 Unauthorized" ); //envoi au client le mode d'identification
                        header( "WWW-Authenticate: NTLM" ); //dans notre cas le NTLM
                        exit; //on quitte

                        }
                        -31
                        0
                        1. Les 19 lignes sont du commentaire et l'ouverture session :

                          <?php

                          /***********************************************************************

                          ************************************************************************
                          *
                          * PHP NTLM GET LOGIN
                          * Version 0.2.1
                          * http://www.secusquad.com/ntlm/
                          * Copyright (c) 2004 Nicolas GOLLET ( Nicolas (dot) gollet (at) secusquad (dot) com )
                          * Copyright (c) 2004 Flextronics Saint-Etienne
                          *
                          * This program is free software. You can redistribute it and/or modify
                          * it under the terms of the GNU General Public License as published by
                          * the Free Software Foundation; either version 2 of the License.
                          *
                          ***********************************************************************/

                          session_start();
                          0
                          1. Marque nous les 19 premières lignes stp...
                            0
                            1. J'accede à la page avec un lien :<div align="center" ><a href="./test.php" >ici</a></div>
                              0
                              1. alors apparemment il y a un souci avec les sessions.

                                Appel tu ta page par un include ?
                                0
                                1. J'avais déja essayer ce code j'obtient ceci:

                                  Notice: A session had already been started - ignoring session_start() in c:\www_intranet_new\test.php on line 19

                                  Notice: Undefined index: Authorization in c:\www_intranet_new\test.php on line 26

                                  Warning: Cannot modify header information - headers already sent by (output started at c:\www_intranet_new\test.php:19) in c:\www_intranet_new\test.php on line 27

                                  Warning: Cannot modify header information - headers already sent by (output started at c:\www_intranet_new\test.php:19) in c:\www_intranet_new\test.php on line 28
                                  0
                                  • 1
                                  • 2