Вход в систему Пользователи Электронная почта | NTLM / Apache / PHP - PullRequest
1 голос
/ 05 мая 2011

Я использую приведенный ниже скрипт, чтобы получить информацию о зарегистрированных пользователях в apache. Это работает удовольствие.

Мне было любопытно, можно ли получить с этого адреса электронной почты зарегистрированных пользователей?

Какую еще информацию я могу получить? Имя и фамилия?

Если это не сработает, как я могу получить адрес электронной почты зарегистрированных пользователей? Возможно ли это?

Заранее спасибо

    // This a copy taken 2008-08-21 from http://siphon9.net/loune/f/ntlm.php.txt to make sure the code is not lost.
// For more information see:
// http://blogs.msdn.com/cellfish/archive/2008/08/26/getting-the-logged-on-windows-user-in-your-apache-server.aspx

// NTLM specs http://davenport.sourceforge.net/ntlm.html

$headers = apache_request_headers();

if (!isset($headers['Authorization'])){
        header('HTTP/1.1 401 Unauthorized');
        header('WWW-Authenticate: NTLM');
        exit;
}

$auth = $headers['Authorization'];

if (substr($auth,0,5) == 'NTLM ') {
        $msg = base64_decode(substr($auth, 5));
        if (substr($msg, 0, 8) != "NTLMSSP\x00")
                die('error header not recognised');

        if ($msg[8] == "\x01") {
                $msg2 = "NTLMSSP\x00\x02"."\x00\x00\x00\x00". // target name len/alloc
                        "\x00\x00\x00\x00". // target name offset
                        "\x01\x02\x81\x01". // flags
                        "\x00\x00\x00\x00\x00\x00\x00\x00". // challenge
                        "\x00\x00\x00\x00\x00\x00\x00\x00". // context
                        "\x00\x00\x00\x00\x30\x00\x00\x00"; // target info len/alloc/offset

                header('HTTP/1.1 401 Unauthorized');
                header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2)));
                exit;
        }
        else if ($msg[8] == "\x03") {
                function get_msg_str($msg, $start, $unicode = true) {
                        $len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
                        $off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
                        if ($unicode)
                                return str_replace("\0", '', substr($msg, $off, $len));
                        else
                                return substr($msg, $off, $len);
                }
                $user = get_msg_str($msg, 36);
                $domain = get_msg_str($msg, 28);
                $workstation = get_msg_str($msg, 44);
                print $msg;

                print "You are $user from $workstation.$domain";
        }
}

Ответы [ 2 ]

2 голосов
/ 28 июня 2012

Вы всегда можете использовать модуль php-ldap, чтобы узнать больше о зарегистрированном пользователе, когда вы знаете, кто он. В этом примере будут выведены все записи для выбранного вами отличительного имени. Вам нужно проделать небольшую работу здесь, вводя информацию для ваших собственных обстоятельств. Инструмент LDP в Windows очень удобен для поиска информации, которую можно вставить сюда.

<?php
//specify the Distinguished Name
$dn = "CN=Joe Bloggs,OU=SomeOU,DC=SomeDomain,DC=com";

$filter = "(sAMAccountName=bloggsj)";

$ad = ldap_connect("ldap://yourADserver");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
$bd = ldap_bind($ad,"yourDomainReadingAccount@wherever.com","secret")  or die("couldn't bind to AD!");

$result = ldap_search($ad, $dn, $filter);
$entries = ldap_get_entries($ad, $result);

print_r($entries);
?>
0 голосов
/ 06 мая 2011

Нет, извините, спецификация NTLM касается только аутентификации и будет содержать только имя пользователя, домен и ответ аутентификации, хэшированный от вашего запроса. Вы не получите имя или адрес электронной почты таким образом.

...