Php как узнать имя пользователя

Можете ли вы получить имя пользователя Windows (AD) в PHP?

У меня есть веб-приложение 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 вернет значение, например: DOMAIN\username в нашей сети, а затем это просто случай удаления DOMAIN\ из строки.

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

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

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

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

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

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

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

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

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

Проверьте исправленный модуль аутентификации NTLM для Apache https://github.com/rsim/mod_ntlm

На основе модуля авторизации NTLM для Apache / Unix http://modntlm.sourceforge.net/

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

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

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

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

Есть несколько дополнительных библиотек PEAR, которые могут облегчить задачу:

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

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

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

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

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

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

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

LoadModule authnz_sspi_module modules/mod_authnz_sspi.so 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  

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

$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; 

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

Источник

get_current_user

Результатом выполнения данного примера будет что-то подобное:

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

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

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

User Contributed Notes 7 notes

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

$processUser = posix_getpwuid ( posix_geteuid ());
print $processUser [ ‘name’ ];
?>

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

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:

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.

Further testing of behaviour on Windows vs Linux.

On Linux this function is indeed returning the owner of the script. If you want to know the username PHP is running as you can use POSIX functions (or shell_exec with ‘whoami’).

On Windows this function is returning the username PHP is running as. Both for IIS (IUSR) and Apache (SYSTEM — which comes from the fact Apache is a service on Windows).

The behaviour on Windows is actually useful given that POSIX functions aren’t available. If you need to find the owner of the script on Windows perhaps the best way is to shell_exec to use dir /Q, and parse that.

Since this only returns the file owner and not the actual user running the script, an alternative in Linux is:

$current_user = trim ( shell_exec ( ‘whoami’ ));
?>

If you want to get the name of the user who executes the current PHP script, you can use

$username = getenv ( ‘USERNAME’ ) ?: getenv ( ‘USER’ );
echo $username ; // e.g. root or www-data
?>

If you have userdir enabled, get_current_user() returns the username of the user hosting the public_html. For example, http://example.com/~bobevans/somescript.php will return bobevans when calling get_current_user().

  • Опции PHP/информационные функции
    • assert_​options
    • assert
    • cli_​get_​process_​title
    • cli_​set_​process_​title
    • dl
    • extension_​loaded
    • gc_​collect_​cycles
    • gc_​disable
    • gc_​enable
    • gc_​enabled
    • gc_​mem_​caches
    • gc_​status
    • get_​cfg_​var
    • get_​current_​user
    • get_​defined_​constants
    • get_​extension_​funcs
    • get_​include_​path
    • get_​included_​files
    • get_​loaded_​extensions
    • get_​required_​files
    • get_​resources
    • getenv
    • getlastmod
    • getmygid
    • getmyinode
    • getmypid
    • getmyuid
    • getopt
    • getrusage
    • ini_​alter
    • ini_​get_​all
    • ini_​get
    • ini_​parse_​quantity
    • ini_​restore
    • ini_​set
    • memory_​get_​peak_​usage
    • memory_​get_​usage
    • memory_​reset_​peak_​usage
    • php_​ini_​loaded_​file
    • php_​ini_​scanned_​files
    • php_​sapi_​name
    • php_​uname
    • phpcredits
    • phpinfo
    • phpversion
    • putenv
    • set_​include_​path
    • set_​time_​limit
    • sys_​get_​temp_​dir
    • version_​compare
    • zend_​thread_​id
    • zend_​version
    • get_​magic_​quotes_​gpc
    • get_​magic_​quotes_​runtime
    • restore_​include_​path

    Источник

    Как вывести имя авторизованного пользователя?

    Exploding

    Только Вы бы почитали про sql-инъекции, а то так пихать в запрос все что не попадя — все равно что тянуть все в рот, что на дороге нашел.

    BadassRolf

    BadassRolf

    на счет $user[‘name’]; не понятно. у меня он нигде не хранится, я вам скинул весь код.
    как его записать можно?

    Exploding

    BadassRolf: вместо name — любое имя поля которое хотите чтобы выводилось в качестве имени, наверно тогда $user[«login»], если более подходящего нет ничего:)

    BadassRolf

    Exploding

    BadassRolf

    Exploding

    774462ce6a3c41f494eaca20d7c1352e.jpg

    Ну так правильно! Причем тут кнопка. Поле называется login!
    измените на это:
    if (isset($_POST[‘login’]))

    Exploding

    BadassRolf

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

    Exploding

    BadassRolf

    Exploding

    BadassRolf: И хотя бы привести пример ошибки, которую выдает интерпретатор, а не просто «не работает».
    Контроль ошибок включается: error_reporting(-1);

    BadassRolf

    Exploding

    Уффф. вот так 100% должно работать.
    [«login»]=> string(5) — это по вашему что означает)))))
    [«login_u»]=> string(0) — и вот это))

    if (isset($_POST['login'])) < $login_true = mysqli_query($connections, "SELECT * FROM `users` WHERE login='".$_POST['login']."' AND password = MD5('".$_POST['password']."')"); if ($login_true) < $user = mysql_fetch_assoc($login_true); $_SESSION['login_user'] = $login_true; $_SESSION['user_name'] = $user['name']; //или где там имя храниться >else echo "Не правильно"; > echo "Здрасте, ".$_SESSION["user_name"];

    BadassRolf

    Exploding

    Exploding

    BadassRolf

    if (isset($_POST['login_u'])) < $login_true = mysqli_query($connections, " SELECT * FROM `users` WHERE login='".$_POST['login']."' AND password = MD5('".$_POST['password']."'); "); if ($login_true) < $count = mysqli_num_rows($login_true); if ($count >0) < $_SESSION['login_user'] = $login_true; >else < echo "Не правильно"; >> $_SESSION['user_name'] = $_POST['login']; >

    Exploding

    BadassRolf: Ну. скрипя и отворачивая голову, учитывая что это на локалке для себя. )))
    Только определение $_SESSION[‘user_name’] = $_POST[‘login’]; хотя бы в блок с проверкой запихните, а то мало ли какой пост_логин прийдет.

    if (isset($_POST[‘login_u’])) $login_true = mysqli_query($connections, »
    SELECT * FROM `users` WHERE login='».$_POST[‘login’].»‘ AND password = MD5(‘».$_POST[‘password’].»‘);
    «);
    if ($login_true) $count = mysqli_num_rows($login_true);
    if ($count > 0) $_SESSION[‘login_user’] = $login_true;
    $_SESSION[‘user_name’] = $_POST[‘login’];
    >else echo «Не правильно»;
    >
    >

    BadassRolf

    Exploding: я от силы php изучаю неделю. практикуюсь второй день) вот все и криво и как попало. с повышением знаний буду исправлять код)

    Exploding

    Но я бы разобрался! Т.к. фактически вы вроде бы и сверились с БД но как-то хреново сверились))) Почему логин не из записи БД берется а из поста?)))) Фен-шуй за это покарает колючей плетью))

    Exploding

    BadassRolf: Обязательно исправьте, т.к. этот вариант крайне не подходящий для постоянной работы. Заглушка, так можно сказать про него:)

    Источник

    Получение имени пользователя Windows средствами PHP

    Вот таким способом можно реализовать получение имени пользователя 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) == 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) == 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 // Обработка имени компьютера полученного с сервера $strHost =»; for($i=0;$i

    Источник

    Читайте также:  Php длительность выполнения скрипта
Оцените статью