Username / En php via NTLM

Fermé
Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013 - 10 juin 2008 à 12:52
 haythem1986 - 30 sept. 2013 à 18:50
Bonjour,
Je suis actuellement sur un projet de développement de site intranet pour mon entreprise.
Je dois pouvoir récupérer le login windows, j'ai trouvé un code assez poussé sur un site
https://codes-sources.commentcamarche.net/

Si quelqu'un est assez bon pour me dire pourquoi mon navigateur m'affiche "NTLM Flag Error" qui correspond tout simplement à la ligne echo '45', et bien sa réponse est la bienvenue.

Je remercie d'avance ceux qui s'y tenterons.


Cdlt
A voir également:

2 réponses

<?php
/*
Le code source qui suit est disponible sur la toile, l'auteur ne s'est pas authentifier dans les lignes de commentaires.
Ce code focntionne parfaitement. il faut que tu places un require_once('ntlm.php'); dans la première ligne.
Ensuite la variable de session user te permet de faire les contrôle qui vont bien tout au long de la session.
*/

//header('WWW-Authenticate: NTLM '); En activant cette ligne on peut saisir le login que l'on veut pour tester les accès aux différentes pages - outil de développement -


define('_NTLM_AUTH_FAILED',1);
define('_NTLM_PROXY',2);

function getInfosFromNTLM() {
@session_start();

if (!empty($_SERVER['HTTP_VIA'])) {
return _NTLM_PROXY;
}

$header = apache_request_headers();
$auth = isset($header['Authorization']) ? $header['Authorization'] : null;

if (is_null($auth)) {
return unAuthorized();
}

if ($auth && (substr($auth,0,4) == 'NTLM')) {

$c64 = base64_decode(substr($auth,5));
$state = ord($c64{8});

switch ($state) {

case 1:
$chrs = array(0,2,0,0,0,0,0,0,0,40,0,0,0,1,130,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0);
$ret = "NTLMSSP";
foreach ($chrs as $chr) {
$ret .= chr($chr);
}
return unAuthorized(trim(base64_encode($ret)));
break;

case 3:
$l = ord($c64{31}) * 256 + ord($c64{30});
$o = ord($c64{33}) * 256 + ord($c64{32});
$domain = str_replace("\0","",substr($c64,$o,$l));

$l = ord($c64{39}) * 256 + ord($c64{38});
$o = ord($c64{41}) * 256 + ord($c64{40});
$user = str_replace("\0","",substr($c64,$o,$l));

return array('domain'=>$domain,'user'=>$user);

break;

}

}
}

function unAuthorized($msg=null) {
$ntlm = 'WWW-Authenticate: NTLM';
if ($msg) {
$ntlm .= ' '.$msg;
}
header('HTTP1.0 401 Unauthorized');
header($ntlm);

return _NTLM_AUTH_FAILED;
}

// identification
$infos = getInfosFromNTLM();
switch ($infos) {
case _NTLM_PROXY:
die('No proxy for ntlm');
case _NTLM_AUTH_FAILED:
die('Sorry NTLM auth failed');
default:
//$_SERVER['REMOTE_USER'] = strtolower($infos['user']) ;
$_SESSION['user'] = strtolower($infos['user']) ;
//print_r($infos);
break;
}
// Voila ça me récupère bien les utilisateurs... Si vous voulez faire de la compatibilité avec d'autres scripts qui utilisent la variable serveur faites :
//$_SERVER['REMOTE_USER'] = $infos['user'];

header('HTTP/1.1 401 Unauthorized');
header('Authenticate: NTLM '); // cette ligne permet d'éviter le rappel de login et cloture parfaitement l'opération. Ainsi les fonction POST sont remises en fonction.

/*
Ensuite tu peux suivre les visites dans un fichier txt

// suivi des visites

setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
$fichier = 'suivi.txt';
$contenu = $REMOTE_ADDR.chr(9).chr(9) ; // adresse IP du client
$domaine = gethostbyaddr($_SERVER['REMOTE_ADDR']) ;
$contenu = $contenu . substr($domaine, 0, strpos($domaine,".") ).chr(9).chr(9) ; // nom du poste client
$contenu = $contenu . $_SESSION['user'].chr(9).chr(9) ; //login du client
if (strlen($_SESSION['user']) < 8 ) // tabulation pour la mise en page dans le fichier txt
$contenu = $contenu .chr(9) ;
$contenu = $contenu . strftime("%A %d %B %Y").chr(9).chr(9) ; // date format fr
$contenu = $contenu . date("H:i:s").chr(10) ; // heure

if ($_SESSION['user'] != "xxx") { // n'enregistre pas les essais du webmaster
$handle = fopen($fichier, 'a') ; // ouverture du fichier txt
fputs($handle, $contenu) ; // écriture des données
fclose($handle) ; // fermeture du fichier
*/
}
?>
5
Utilisateur anonyme
1 juil. 2011 à 09:38
Voici pour la source :

http://www.blognote-info.com/fr/n348/ntlm-le-retour
0
Ce code marche parfaitement bien pour moi malheureusement il entraîne un problème qui m'intrigue ...

Mes formulaires ne marchent plus en méthode POST (ils ne marchent plus qu'en GET) sous IE6 quand j'utilise ntlm.php !

IE6 pue me direz vous mais j'en ai besoin :/

Une idée ?
0
Up

Ajouter "header('WWW-Authenticate: Negociate');" au début du fichier ntlm.php
Problème résolu pour moi tout marche parfaitement bien.
0