Проверка подлинности NTLM Всплывающая проблема - PullRequest
1 голос
/ 09 июня 2019

Приведенный ниже код отлично работает и вызывает всплывающее окно с запросом имени пользователя Windows и любых учетных данных, которые вы вводите, печатает, что

Я хочу напечатать имя пользователя Windows без проверки подлинности всплывающее руководство по PLS, как я могу сделать это в PHP

Я попробовал приведенный ниже код, и он отлично работает, но мне просто нужно повторить имя пользователя, взятое автоматически без всплывающего окна

<?php

     $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(!isset($headers['Authorization'])) { //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+) :

        $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

        $lenght_host = (ord($chained64[47])*256 + ord($chained64[46]));

        $offset_host = (ord($chained64[49])*256 + ord($chained64[48]));

        $host = str_replace("\0","",substr($chained64, $offset_host, $lenght_host));

        if ( $login != NULL){

            echo $login;

        } else {

            echo "NT Login empty!";

          }

      }

  }

}

 ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...