Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1655 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Récupérer login windows d'un client [Apache => Windows && PHP4.2.0)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer login windows d'un client [Apache => Windows && PHP4.2.0)

n°706780
perok68
Posté le 23-04-2004 à 10:22:41  profilanswer
 

Bonjour,
 
j'aurais besoin de récupérer le login windows des clients qui se connecterons sur mon fomulaire, afin de pré-remplire une parties des champs de mon formulaire (données stockés sur des BDs).
 
Pour cela, je dispose d'un serveur web apache (1.1) qui tourne sous windows, et de PHP (4.2.0). (Pack EasyPHP 1.6)
 
J'ai essayé phpinfo(), mais je ne trouve pas la variable dont j'ai besoin.
J'ai lu aussi, qu'il fallait installer le module mod_ntlm sur apache, configurer authtype en NTLM afin que la variable $_server['REMOTE_USER'] soit accessible.
Lorsque j'ai essayé de télécharger mod_ntlm sur http://modntlm.sourceforge.net, je me suis rendu compte qu'il s'agissait du module pour unix, et non pas pour windows :-/
 
 
Je pense donc avoir fait plus ou moins le tour de la question, et c'est vraiment en dernier recours que je me tourne vers vous :)
 
Merci d'avance
 

mood
Publicité
Posté le 23-04-2004 à 10:22:41  profilanswer
 

n°707108
Freekill
Electron libre…
Posté le 23-04-2004 à 14:09:16  profilanswer
 

Un client bien configuré ne donnera jamais son login de windows?

n°707119
perok68
Posté le 23-04-2004 à 14:14:23  profilanswer
 

Super ta réponse :-/ ... si tu pouvais être un peu plus explicite...
En attendant, ça ne résoud toujours pas mon problème...
Quelqu'un d'autre aurait une solution ?

n°707310
Freekill
Electron libre…
Posté le 23-04-2004 à 16:12:05  profilanswer
 

C'est pourtant clair non ?  :heink:  
 
Balancer son login windows au premier script qui le demande serait une faille de sécurité, donc quelle que soit la méthode (et il n'y en a certainement pas de "toute faite" en php) il y a de fortes chances pour que le client refuse, donc le script ne marchera pas.
 
Peut-être qu'un truc client-side (applet, activeX ,...) pourrait y arriver, mais cela ne relève plus du php.

n°818335
Flxnico
Posté le 09-08-2004 à 18:29:11  profilanswer
 

A tous ;)
Voici une source que j'ai réalisé pour récuperer le login windows sans aucun module :p
 
(voir aussi http://www.phpcs.com/code.aspx?ID=25272 pour les mise à jour)
== Debut ==
 
<?php
 
/***********************************************************************
*   PHP NTLM GET LOGIN  
*   Version 0.2
* ====================================================    
*                                        
* Copyright (c) 2004 Nicolas GOLLET (Nicolas.gollet@secusquad.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.        
*
***********************************************************************/
 
 
/*
L'identification par NTLM se fait en 6 étape :
 
étape: | type:   | Info échangé
-------|----------------|--------------------------------------------------
    1  | C  --> S   | GET ...        legende : C = Client
-------|----------------|--------------------------------------------------         S = Serveur
    2  | C <--  S  | 401 Unauthorized
       |            | WWW-Authenticate: NTLM
-------|----------------|--------------------------------------------------
    3  | C  --> S   | GET ...
       |           | Authorization: NTLM <base64-encoded type-1-message>
-------|----------------|--------------------------------------------------
    4  | C <--  S  | 401 Unauthorized
       |           | WWW-Authenticate: NTLM <base64-encoded type-2-message>
-------|----------------|--------------------------------------------------
    5  | C  --> S   | GET ...
       |                | Authorization: NTLM <base64-encoded type-3-message>
-------|----------------|--------------------------------------------------    
    6  | C <--  S       | 200 Ok
-------|----------------|--------------------------------------------------
 
*/
 
 
 
$headers = apache_request_headers();  // Récupération des l'entêtes client
 
 
if($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 :
  if (ord($chained64[13]) != 178){
  echo "Votre navigateur Internet n'est pas compatible avec le NTLM, utiliser IE...Merci";
  exit;
  }
   $retAuth = "NTLMSSP";      
   $retAuth .= chr(0);      
   $retAuth .= chr(2);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(40);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(1);
   $retAuth .= chr(130);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(2);
   $retAuth .= chr(2);
   $retAuth .= chr(2);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   
   $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 = 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 = substr($chained64, $offset_login, $lenght_login); // decoupage du login
   
  // l'host  
  $lenght_host = (ord($chained64[47])*256 + ord($chained64[46])); // longueur de l'host.
  $offset_host = (ord($chained64[49])*256 + ord($chained64[48])); // position de l'host.  
  $host = substr($chained64, $offset_host, $lenght_host); // decoupage du l'host  
   
   
 
  echo "Domain is    : $domain";
  echo "<br>Login is : $login";
  echo "<br>host is  : $host";
   
  }
 
 }
 
}
 
 
?>
 
 

n°1898350
cecileetja​de
Posté le 23-06-2009 à 17:08:38  profilanswer
 

help!!!!
J'ai exactement besoin de ce code, mais quand j'essaye de l'exécuter je n'y arrive pas...
 
Dans 1 premier temps j'ai un message d'erreur sur les lignes 32, 33
 
header( "HTTP/1.0 401 Unauthorized" );   //envoi au client le mode d'identification  
 header( "WWW-Authenticate: NTLM" );   //dans notre cas le NTLM  
 
et si je supprime les deux lignes je n'ai aucun message d'erreur mais pas non plus les informations attendues
 
echo "Domain is    : $domain";  
  echo "<br>Login is : $login";  
  echo "<br>host is  : $host";  
 
donc voilà, HELP

n°1899210
rufo
Pas me confondre avec Lycos!
Posté le 25-06-2009 à 15:41:22  profilanswer
 

gros déterrage de topic, ça...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Récupérer login windows d'un client [Apache => Windows && PHP4.2.0)

 

Sujets relatifs
[perle]recuperer un mot cle sur irccatch (...): peut-on récupérer l'exception?
[Apache] Probleme d'URLRécupérer un nom de base pour la détruire (Shell) ?
En quel langage est programmé Windows ?recuperer la premiere ligne d'un tableau
[Scheme] let* avec canvas% : quand get-client-size disponible ?myodbc pour windows
[c windows] pb avec fread [resolut]compiler avec g++ sous windows
Plus de sujets relatifs à : Récupérer login windows d'un client [Apache => Windows && PHP4.2.0)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR