Php получить имя пользователя windows

Вот таким способом можно реализовать получение имени пользователя Windows средствами PHP. Для корректной работы кода в вам нужно будет сконфигурированный Apache.

***************************************************************
* PHP NTLM GET LOGIN
* Version 0.2
* ====================================================
*
* Copyright (c) 2004 Nicolas GOLLET (Nicolas.gollet@secusquad.com)
* Copyright (c) 2004 Flextronics Saint-Etienne
*
* This program is free software. You can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
***********************************************************************/
$headers = apache_request_headers();
if($headers['Authorization'] == NULL){
header( "HTTP/1.0 401 Unauthorized" );
header( "WWW-Authenticate: NTLM" );
exit;
};
if(isset($headers['Authorization']))
{
if(substr($headers['Authorization'],0,5) == 'NTLM '){
$chaine=$headers['Authorization'];
$chaine=substr($chaine, 5);
$chained64=base64_decode($chaine);
if(ord($chained64{8}) == 1){
if (ord($chained64[13]) != 178){
echo "Please IE";
exit;
}
$retAuth = "NTLMSSP";
$retAuth .= chr(0);
$retAuth .= chr(2);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(40);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(1);
$retAuth .= chr(130);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(2);
$retAuth .= chr(2);
$retAuth .= chr(2);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth64 =base64_encode($retAuth);
$retAuth64 = trim($retAuth64);
header( "HTTP/1.0 401 Unauthorized" );
header( "WWW-Authenticate: NTLM $retAuth64" );
exit;
}
else if(ord($chained64{8}) == 3){
$lenght_domain = (ord($chained64[31])*256 + ord($chained64[30]));
$offset_domain = (ord($chained64[33])*256 + ord($chained64[32]));
$domain = substr($chained64, $offset_domain, $lenght_domain);
$lenght_login = (ord($chained64[39])*256 + ord($chained64[38]));
$offset_login = (ord($chained64[41])*256 + ord($chained64[40]));
$login = substr($chained64, $offset_login, $lenght_login);
$lenght_host = (ord($chained64[47])*256 + ord($chained64[46]));
$offset_host = (ord($chained64[49])*256 + ord($chained64[48]));
$host = substr($chained64, $offset_host, $lenght_host);
$hostinfo = $host;
}
}
}
 
/*
* Обработка полученных значений
* http://www.maiboroda.ru
*/
 
// Обработка полученого логина с сервера
$strLogin ='';
for($i=0;$i<strlen($login);$i++)
{
if(ord($login[$i])!="0x00")
$strLogin.=$login[$i];
}
// Обработка имени компьютера полученного с сервера
$strHost ='';
for($i=0;$i<strlen($hostinfo);$i++)
{
if(ord($hostinfo[$i])!="0x00")
$strHost.=$hostinfo[$i];
}

Как использовать OAuth2 со Spring Security в Java

Javaican 14.05.2025

Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .

Анализ текста на Python с NLTK и Spacy

AI_Generated 14.05.2025

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

Реализация DI в PHP

Jason-Webb 13.05.2025

Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .

Обработка изображений в реальном времени на C# с OpenCV

stackOverflow 13.05.2025

Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .

POCO, ACE, Loki и другие продвинутые C++ библиотеки

NullReferenced 13.05.2025

В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .

Паттерны проектирования GoF на C#

UnmanagedCoder 13.05.2025

Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .

Создаем CLI приложение на Python с Prompt Toolkit

py-thonny 13.05.2025

Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .

Конвейеры ETL с Apache Airflow и Python

AI_Generated 13.05.2025

ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .

Выполнение асинхронных задач в Python с asyncio

py-thonny 12.05.2025

Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .

Работа с gRPC сервисами на C#

UnmanagedCoder 12.05.2025

gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .

get_current_user

(PHP 4, PHP 5, PHP 7, PHP 8)

get_current_user
Получает имя владельца текущего PHP-скрипта

Описание

get_current_user(): string

Функция возвращает имя владельца текущего PHP-скрипта.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Функция возвращает имя пользователя в виде строки.

Примеры

Пример #1 Пример использования функции get_current_user()

<?phpecho 'Текущий владелец скрипта: ' . get_current_user();?>

Вывод приведённого примера будет похож на:

Текущий владелец скрипта: SYSTEM

Смотрите также

  • getmyuid() — Получение UID владельца скрипта PHP
  • getmygid() — Получить GID владельца скрипта PHP
  • getmypid() — Получает ID процесса PHP
  • getmyinode() — Получает значение inode текущего скрипта
  • getlastmod() — Получает время последней модификации страницы

Нашли ошибку?

justin samuel

19 years ago

to get the username of the process owner (rather than the file owner), you can use:

<?php
$processUser
= posix_getpwuid(posix_geteuid());
print
$processUser['name'];
?>

south dot bucks at gmail dot com

12 years ago

On Centos, the Red Hat linux clone, this instruction gives the file's OWNER (the first parameter in instruction 'chown'). It does not reveal the file's GROUP.

get_current_user() does NOT reveal the current process' user's identity.

See: posix_getuid() - Return the real user ID of the current process

s dot bond1 at lse dot ac dot uk

18 years ago

The information returned by get_current_user() seems to depend on the platform.


Using PHP 5.1.1 running as CGI with IIS 5.0 on Windows NT, get_current_user() returns the owner of the process running the script, *not* the owner of the script itself.


It's easy to test - create a file containing:


<?php

echo get_current_user();

?>



Then access it through the browser. I get: IUSR_MACHINE, the Internet Guest Account on Windows, which is certainly not the owner of the script.

  • #1

Вообщем, одолел я авторизацию моего web приложения в домене виндовом, через протокол LDAP, выброс формы, и вводим логин и пароль, проверяем, юзера и группу, все работает.

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

как я понимаю PHP это серверный язык, и он не работает на клиенте?
нашел такие разделы, NTLM авторизацию в AD
Но как я понимаю скрипт для АПАЧА

PHP:

$headers = apache_request_headers();    // Recuperation des l'entetes client
    

if($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

мое приложение крутиться на ms IIS server
значит, нужно, что-то, что может вытащить текущую учетку ?

На просторах, нета нашел для IIS сервера решение

Если PHP-приложение установлено на IIS, то это делается через переменную AUTH_USER. Проверила — работает на IE, Chrome и FireFox. Вот мой проверочный пример кода:

PHP:

<?php   
   echo $_SERVER['AUTH_USER'];
?>

В результате получаю имя пользователя в виде: MYDOMAIN\user.name

Есть только одно НО! Чтобы это решение действительно заработало, Вам придется отказаться от другого типа аутентификации на сайте (т.е. только через AD).

Вот что нужно сделать в IIS: у сайта в настройках аутентификации (Authentication) включаете (Enable) «Windows Authentication» и обязательно (!) отключаете анонимный доступ (Anonymous authentication).

В IE и Chrome заработает сразу, а FireFox нужно будет сначала поставить это дополнение и прописать сайт в доверенные: https://addons.mozilla.org/ru/firefox/addon/integrated-auth-for-firefox/

Но далее вопрос, я не владелец хостинга, не администратор, и возможно мне откажут, в отключении анонимности входа, так как я понял, все страницы, на этом IIS сервере крутяться с анонимным входом.

Как мне решить мою проблему ????

  • #2

Никак. NTLM работает только в локальной сети.

  • #3

Никак. NTLM работает только в локальной сети.

Веб у меня, только в ЛВС, в одном домене. Возможно вытащить учетку с локального компа, тыкнул на скрипт, и возврат аккаунта, [email protected]

  • #5

web приложение, у меня в ЛВС, в домене. Как получить имя залогиненного пользователя и передать в PHP ?

  • #6

IIS сам передаёт его в PHP. $_SERVER[‘AUTH_USER’]

  • #7

IIS сам передаёт его в PHP. $_SERVER[‘AUTH_USER’]

нужно отключать на IIS сервере анонимный вход, чтобы заработала данная функция

???

  • #8

Если хотите получать NTLM авторизацию? Да.

  • #9

Если хотите получать NTLM авторизацию? Да.

я не отличаю, в силу, новезны данного материала.
У меня есть LDAP атовризация, через форму

PHP:

<?php
// Форма для ввода пароля и логина
print '
<form action="index.php" method="post">
<table>
      <tr>
            <td>Имя:</td>
            <td><input type="text" name="login" /></td>
      </tr>
      <tr>
            <td>Пароль:</td>
            <td><input type="password" name="password" /></td>
      </tr>
      <tr>
            <td></td>
            <td><input type="submit" value="Авторизироваться" /></td>
      </tr>
</table>
</form>

а мне надо, подставить в переменные АВТОМАТИЧЕСКИ, т.е. запустил веб страницу, и сразу вход на веб, данные об учетке , т.е. пароль не проверять, а только узнать, что за юзер, проверить, в какую группу он входит, и если он входит в нужную группу, То он попадет в разрешенный для этой группы раздел сайта.
Я возможно путаю вкорне данную задачу, такое допускаю. Так как я понял LDAP и NTLM разные вещи, точнее протоколы для разных задач.

PHP:

  echo $_SERVER['AUTH_USER'];

пусто, ничего не возвращает

  • #10

Это как в том анекдоте.
Вы либо штаны наденьте, либо крестик снимите.
Либо LDAP через форму, либо NTLM через сервер.

  • #11

Это как в том анекдоте.
Вы либо штаны наденьте, либо крестик снимите.
Либо LDAP через форму, либо NTLM через сервер.

Понимаю, что не понимаю )))))) я думал, можно использовать оба эти инструмента, вытащить имя, и подставить его в LDAP … про NTLM я даже не читал …
а чтобы не ломать, как передать, ЛДАПУ, данные юзера, как-то можно вытащить это ?

  • #12

А теперь забудьте всё, что вы тут писали, и опишите задачу, не пытаясь её решить.

  • #13

А теперь забудьте всё, что вы тут писали, и опишите задачу, не пытаясь её решить.

Мне стыдно ))) ладно и так … Пользователь логинется в домен, открыввет index.php и попадает в допустимый раздел сайта на основе группы, допустем это CN=Admins, весь этот процесс без ввода пароля.

  • #14

Пользователь логинется в домен

Как это относится к вашей задаче?

открыввет index.php и попадает в допустимый раздел сайта на основе группы, допустем это CN=Admins, весь этот процесс без ввода пароля.

Вот это уже больше похоже на задачу.
Итак, у нас есть задача:
1. Обеспечить аутентификацию пользователей без ввода пароля, по учётке АД.
2. Обеспечить авторизацию оных пользоваталей на основании данных из АД.

Для решения первого вопроса, вам надо настроить IIS.
Для решения второго — по выданному вам IIS имени пользователя залезть в LDAP и вытащить нужную вам информацию.

  • #15

Как это относится к вашей задаче?

Вот это уже больше похоже на задачу.
Итак, у нас есть задача:
1. Обеспечить аутентификацию пользователей без ввода пароля, по учётке АД.
2. Обеспечить авторизацию оных пользоваталей на основании данных из АД.

Для решения первого вопроса, вам надо настроить IIS.
Для решения второго — по выданному вам IIS имени пользователя залезть в LDAP и вытащить нужную вам информацию.

спасибо, буду читать про IIS.
А без пароля, это термин сквозная авторизация ? (мне для поиска)

У меня есть веб-приложение PHP в интрасети, которое может извлекать IP-адрес и имя хоста текущего пользователя на этой странице, но мне было интересно, есть ли способ получить / извлечь их имя пользователя Active Directory / Windows. Это возможно?

Проверьте переменную запроса AUTH_USER . Это будет пустым, если ваше веб-приложение разрешает анонимный доступ, но если ваш сервер использует базовую или встроенную проверку подлинности Windows, он будет содержать имя пользователя аутентифицированного пользователя.

В домене Active Directory, если ваши клиенты работают с Internet Explorer, и ваши разрешения на веб-сервер / файловую систему настроены правильно, IE будет тихо отправлять свои учетные данные домена на ваш сервер, а AUTH_USER будет MYDOMAIN\user.name если пользователи не должны явно регистрировать в вашем веб-приложении.

У меня php mysql работает на IIS – я могу использовать $_SERVER["AUTH_USER"] если я $_SERVER["AUTH_USER"] проверку подлинности Windows в IIS -> Аутентификация и отключить анонимную аутентификацию (важно)

Я использовал это для получения моего пользователя и домена:

 $user = $_SERVER['AUTH_USER']; 

$user вернет значение, например: DOMAIN\username в нашей сети, а затем это просто случай удаления DOMAIN\ из строки.

Это работало в IE, FF, Chrome, Safari (проверено).

Посмотрите на функции библиотеки PHP LDAP: http://us.php.net/ldap .

Active Directory [в основном] соответствует стандарту LDAP.

Если вы используете Apache в Windows, вы можете установить mod_auth_sspi из

http://www.gknw.at/development/apache/httpd-2.2/win32/modules/mod_auth_sspi-1.0.4-2.2.2.zip

Инструкции находятся в файле INSTALL, и есть пример whoami.php. (Это просто копирование файла mod_auth_sspi.so в папку и добавление строки в httpd.conf.)

После его установки и необходимых настроек в httpd.conf для защиты каталогов, которые вы хотите, PHP заполнит $_SERVER['REMOTE_USER'] пользователем и доменом (USER \ DOMAIN) аутентифицированного пользователя в IE – – либо запросить и подтвердить подлинность в Firefox, прежде чем передавать его.

Информация основана на сеансе, поэтому сингл (ish) signon возможен даже в Firefox …

-Craig

Возможно, вы могли бы аутентифицировать пользователя в Apache с помощью mod_auth_kerb , требуя аутентифицированного доступа к некоторым файлам … Я так думаю, что имя пользователя должно также быть доступно в переменных среды PHP где-то … возможно, лучше всего проверить с помощью <?php phpinfo(); ?> <?php phpinfo(); ?> только вы его запустите.

Нет. Но что вы можете сделать, это активировать администратор Active Directory LDAP, чтобы пользователи могли поддерживать один набор учетных данных

http://us2.php.net/ldap

Если вы хотите получить идентификатор / имя пользователя удаленного пользователя, используйте:

 echo gethostbyaddr($_SERVER['REMOTE_ADDR']); 

Вы получите что-то вроде iamuser1-mys.corp.company.com

Отфильтруйте остальную часть домена позади, и вы можете получить только идентификатор.

Для получения дополнительной информации посетите http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/

get_user_name работает так же, как getenv (‘USERNAME’);

У меня были проблемы с кодированием (с кириллицей) с использованием getenv (‘USERNAME’)

Ссылка на попытку также выяснить, является ли AUTH_USER частью определенной группы домена; умный способ сделать это: t создать заблокированную папку с текстовыми файлами (может быть пустым). Установите безопасность только для группы безопасности / группы, которую вы хотите проверить. Когда вы запустите @file_get_contents (<— будет бросать предупреждение) … если у пользователя нет группового доступа, они не смогут получить содержимое файла и, следовательно, не будут иметь доступ к этой конкретной группе AD. Это просто и прекрасно работает.

Вы можете сказать getenv('USERNAME')

У нас есть несколько доменов в нашей среде, поэтому я использую preg_replace с регулярным выражением, чтобы получить только имя пользователя без DOMAIN \.

 preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]); 

Это простой пример интеграции NTLM AD, который позволяет осуществлять единый вход в Internet Explorer, требует входа / конфигурации в других браузерах.

Пример PHP

 <?php $user = $_SERVER['REMOTE_USER']; $domain = getenv('USERDOMAIN'); ?> 

В файле apache httpd.conf

 LoadModule authnz_sspi_module modules/mod_authnz_sspi.so <Directory "/path/to/folder"> AllowOverride All Options ExecCGI AuthName "SSPI Authentication" AuthType SSPI SSPIAuth On SSPIAuthoritative On SSPIOmitDomain On Require valid-user Require user "NT AUTHORITY\ANONYMOUS LOGON" denied </Directory> 

И если вам нужен модуль, эта ссылка полезна:

https://www.apachehaus.net/modules/mod_authnz_sspi/

попробуйте этот код:

 $user= shell_exec("echo %username%"); echo "user : $user"; 

вы получаете имя пользователя Windows (AD) в php

Я попробовал почти все эти предложения, но все они возвращали пустые значения. Если у кого-то еще есть эта проблема, я нашел эту удобную функцию на php.net ( http://php.net/manual/en/function.get-current-user.php ):

 get_current_user(); $username = get_current_user(); echo $username; 

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

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows car game download
  • Asus camera azurewave camera windows 10
  • Usb driver windows 98se
  • Загрузочная флешка windows 10 оригинальная
  • Host файл windows 10 путь