par
FuZZyLine » 01 sept. 2009, 10:00
Je viens de trouver la source du problème, mais j'aurais encore besoin d'aide pour le regler.
En effet, le portail que je développe est pour un intranet, j'include donc un script (trouvé sur internet) pour récupérer le login Windows de la personne qui arrive sur la page, pour qu'elle n'aie pas besoin de se logguer, et j'ai donc trouvé que c'était justement ce script qui vidait mes variables $_POST et $_FILES.
Le problème est que, je ne vois pas d'où vient le problème, peut-etre pourriez-vous m'aider?
Voilà le script :
<?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)
$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;
}
}
}
}
?>
Il remplit bien sa fonction, à savoir : récupérer le login windows de la personne qui visite la page. Mais une fois exécuté, plus moyen de récupérer les valeurs de $_POST et $_FILES.
Sauvegarde tes valeurs dans la session:
// --- Le principe mais peu conseillé de cette manière !
//
$_SESSION[get] = serialize($_GET);
$_SESSION[post] = serialize($_POST);
$_SESSION[files] = serialize($_FILES);
$_SESSION[xxx] = ...;
Ce qui est conseillé, en revanche, s'est d'enregistrer dans une table les infos que tu veux sauvegarder
comme (GET, POST, FILES, le Login, etc), avec comme id (PRIMARY_KEY) l'id de session. Ainsi, ca
te permetra de récupérer les infos voulues.
'fin pour ce que tu veux sauvegarder, de pages en pages, tu te sert des sessions
Je sais, je suis peu clair mais c'est le matin, un peu de compassion, stp lol
@+

[quote="paro"]
Je viens de trouver la source du problème, mais j'aurais encore besoin d'aide pour le regler.
En effet, le portail que je développe est pour un intranet, j'include donc un script (trouvé sur internet) pour récupérer le login Windows de la personne qui arrive sur la page, pour qu'elle n'aie pas besoin de se logguer, et j'ai donc trouvé que c'était justement ce script qui vidait mes variables $_POST et $_FILES.
Le problème est que, je ne vois pas d'où vient le problème, peut-etre pourriez-vous m'aider?
Voilà le script :
[php]
<?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)
$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;
}
}
}
}
?>
[/php]
Il remplit bien sa fonction, à savoir : récupérer le login windows de la personne qui visite la page. Mais une fois exécuté, plus moyen de récupérer les valeurs de $_POST et $_FILES.
[/quote]
Sauvegarde tes valeurs dans la session:
[php]
// --- Le principe mais peu conseillé de cette manière !
//
$_SESSION[get] = serialize($_GET);
$_SESSION[post] = serialize($_POST);
$_SESSION[files] = serialize($_FILES);
$_SESSION[xxx] = ...;
[/php]
Ce qui est conseillé, en revanche, s'est d'enregistrer dans une table les infos que tu veux sauvegarder
comme (GET, POST, FILES, le Login, etc), avec comme id (PRIMARY_KEY) l'id de session. Ainsi, ca
te permetra de récupérer les infos voulues.
'fin pour ce que tu veux sauvegarder, de pages en pages, tu te sert des sessions
Je sais, je suis peu clair mais c'est le matin, un peu de compassion, stp lol
@+ ;)