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
haythem1986 - 30 sept. 2013 à 18:50
A voir également:
- Php ntlm authentication
- Easy php - Télécharger - Divers Web & Internet
- Authentication framework samsung c'est quoi - Forum Sony
- Retour a la ligne php ✓ - Forum PHP
- Php natif - Forum PHP
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
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
*/
}
?>
/*
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
*/
}
?>
1 juil. 2011 à 09:38
http://www.blognote-info.com/fr/n348/ntlm-le-retour
23 mai 2012 à 16:52
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 ?
11 juin 2012 à 14:36
Ajouter "header('WWW-Authenticate: Negociate');" au début du fichier ntlm.php
Problème résolu pour moi tout marche parfaitement bien.