Php apache windows аутентификация

Авторизация через .htaccess

У сервера apache есть возможность сделать базовую авторизацию. Чтобы закрыть директорию, в неё нужно поместить два файла – .htaccess и .htpasswd.

Содержание файла .htaccess

AuthName «Authorization» – сообщение в окне ввода логина и пароля, кириллица не поддерживается, в Google Chrome вообще не выводится.

AuthUserFile /путь_до_директории/.htpasswd – путь до файла с паролями.

Чтобы узнать полный путь к директории достачно поместить в неё PHP файл и запустить его в браузере.

Авторизацией можно закрыть только определенные файлы, например архивы ZIP.

На некоторых хостингах авторизация на статические файлы (изображения, шрифты и т.д.) может не работать т.к. они отдаются через Nginx.

Стоит проверить прямой доступ к самим файлам .htaccess и .htpasswd из браузера, если да, то закрыть его:

Пароли в htpasswd

В файле хранится пары логина и хеша пароля, например:

Логин может содержать латинские буквы, цифры, — и _ , регистрозависимый.

Хеш можно сгенерировать в PHP, возможны следующие алгоритмы:

Bcrypt

В настоящее время считается очень безопасным, работает начиная с версии 2.4, формат:

$2y$ или $2a$ + результат алгоритма crypt_blowfish.

MD5 (APR)

Специфический алгоритм Apache (1000 итераций MD5 случайной соли и пароля), работает во всех версиях.

$apr1$ + результат алгоритма.

Работает только на Unix хостингах и до версии Apache 2.2.17. Ограничивает длину пароля до 8 символов. Считается небезопасным.

Этот алгоритм небезопасен по современным стандартам, работает во всех версиях.

+ результат SHA-1 (бинарная строка из 20-ти символов) закодированный в Base64.

Генератор htpasswd

Введите логин и пароль:

Авторизация и выход

Реквизиты доступа к закрытой директории можно передать в URL:

https:// логин : пароль @example.com/path

Если такие URL использовать в src изображений, скриптов и стилей, то работать они не будут, вызвав ошибку:

Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.

Завершение сеанса происходит по закрытию браузера, но не вкладки. Другого варианта не предусмотрено.

Взаимодействие с PHP

В PHP можно отследить авторизированного пользователя по переменным массива $_SERVER .

Если их нет, значит пользователь не авторизирован. Вывести диалог входа из PHP:

apache — Аутентификация NTLM — Получить Windows логин, домен и хост в переполнении стека

Я работаю над PHP-приложением с единым входом (SSO).
Пользователи входят в свою сессию Windows и хотят, чтобы они автоматически входили в приложение под своей учетной записью Windows (связанной с LDAP Active Directory).

Я попробовал этот скрипт:

Этот скрипт работает в этой конфигурации:

  • Windows Server 2003
  • Apache 2.2 с модулем mod_auth_sspi

Но теперь мне нужно реализовать это на этой конфигурации, и она не работает:

  • Windows Server 2008
  • Apache 2.4.6 с модулем mod_authnz_sspi

Я продолжаю получать сообщение «Ошибка флага NTLM!» Из-за этого условия:

потому что ord ($ chained64 [13]) возвращает 130, но я не могу перейти в это условие:

Так как ord($chained64<8>) всегда возвращает 1.

Я попытался выполнить команду ‘whoami’ в php, вот так: echo exec(‘whoami’); -> когда я выполняю эту команду в cmd.exe, я получаю текущего зарегистрированного пользователя, но когда я выполняю ее в PHP, я получаю nt_authority / system.

Я предположил, что когда PHP выполняет команду ‘whoami’, Windows проверяет вход в систему службы Apache. Я вошел в свойства Apache на вкладке «Вход в систему», чтобы войти в систему как действительный пользователь Active Directory. Но тогда, когда PHP выполняет echo exec(‘whoami’); Я получаю только логин, используемый для Apache, а не текущий пользователь.

Я использую Internet Explorer 8 для выполнения сценария PHP.

Читайте также:  Как выделить память java для minecraft windows 10

У меня есть это в моем Apache httpd.conf ( _PATH_ путь к моим файлам php, может быть, это неправильно?):

Options None
AllowOverride All
Order allow,deny
Allow from all
AuthName «SSPI Protected Place»AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIOfferBasic On
SSPIOmitDomain On
Require valid-user

Я вошел как пользователь домена на машине

Когда я пытаюсь использовать Firefox, я получаю приглашение ввести логин и пароль. Когда я отправляю приглашение, скрипт получает логин из приглашения, но это не то, что я хочу сделать: я должен заставить это работать с IE, и я не хочу снова вводить логин и пароль. Я хочу войти в систему текущего сеанса Windows.

В Firefox я занялся примерно: config для установки network.automatic-ntlm-auth.trusted-uris в мой домен, благодаря @ThaDafinser. Теперь я больше не получаю приглашение в Firefox, и все работает, но мне всегда нужно, чтобы оно работало в IE.

В IE я установил Local Intranet Security на самый низкий уровень, но ничего не изменилось.

В IE проверен «Автоматический вход в систему с использованием текущего имени пользователя и пароля» для локальной интрасети. & Доверенные сайты.

Когда я заставляю IE запрашивать учетные данные в приглашении, если я отправляю приглашение, IE не возвращает учетные данные, в отличие от Firefox.

Я добавил URL в доверенные сайты в IE, ничего не изменилось.

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

Я снял флажок «Использовать HTTP 1.1 через прокси-соединения» в IE> «Свойства обозревателя»> «Дополнительно», но я все еще не могу получить информацию о сеансе в Internet Explorer, даже если использую подсказку.

Я добавил полный URL-адрес в Internet Explorer> Свойства обозревателя> Безопасность> Локальная интрасеть> Сайты> Дополнительно.

В Internet Explorer> «Свойства обозревателя»> «Безопасность»> «Локальная интрасеть»> «Сайты»> «Дополнительно» я также добавил ту же часть домена (mycompany.com), что и в Firefox, чтобы он работал, но это не помогло.

Изменил мой httpd.conf, чтобы он был совместим с Apache 2.4, в соответствии с тем, что @timclutton сказал в своем ответе:

Я попытался установить базовую аутентификацию intead SSPI, и она не работает.

AuthType Basic
AuthName «Требуется аутентификация» AuthUserFile «E: /ДОРОЖКА/.htpasswd»Require valid-user

Заказать разрешить, отказать
Разрешить от всех

Решение

Когда я пытаюсь использовать Firefox, я получаю приглашение ввести логин и пароль. Когда я отправляю приглашение, скрипт получает логин из приглашения, но это не то, что я хочу сделать: я должен заставить это работать с IE, и я не хочу снова вводить логин и пароль. Я хочу войти в систему текущего сеанса Windows.

Вы можете удалить приглашение, изменив настройки Firefox:

  • Введите: «about: config» в адресной строке
  • Проверьте на network.automatic-ntlm-auth.trusted-uris
  • Установите значение для своего домена или части домена, например mycompany.com (разделяйте запятыми несколькими значениями)

Для IE вам нужно установить настройки безопасности для вашей страницы (интранета) ниже, чем для остальной части интернета.
Посмотри пожалуйста https://superuser.com/questions/148063/why-does-internet-explorer-keep-asking-me-for-ntlm-credentials-in-an-intranet-zo

Другие решения

mod_authnz_sspi Модуль прозрачно обрабатывает все аспекты процесса аутентификации, что означает, что вам не нужен ваш скрипт аутентификации PHP. Если модуль настроен правильно, вы должны просто иметь возможность ссылаться $_SERVER[‘REMOTE_USER’] в вашем сценарии. Любой пользователь, который не может быть аутентифицирован, получит стандартный Apache 403 — Forbidden ошибка.

Я подозреваю, что проблема с вашим httpd.conf так как вы используете Apache 2.2 allow/deny синтаксис, и это не будет работать в Apache 2.4 (если у вас нет mod_access_compat модуль включен). Вы должны прочитать Обновление до 2.4 с 2.2 в документации Apache.

Убедиться, что E:/_PATH_ это точная папка, из которой выполняется ваш PHP-скрипт, и каждый запрос к этому пути требует аутентификации.

Настройка аутентификации Windows для Apache

Начнем с того, что я искал в Интернете около часа, пытаясь выяснить, как это сделать безуспешно, поэтому я пишу этот вопрос.

Читайте также:  Отключить обновления windows 10 драйвер

У меня есть сайт интрасети, который требует доступа к имени пользователя Windows (не серверу, на котором работает Apache, а пользователю, который обращается к сайту интрасети).

Я установил adLDAP, и он работает так, что пользователь может войти в него, чтобы проверить группу, в которой он находится. Но для того, чтобы мой сайт был более безопасным, я бы предпочел получить доступ к имени пользователя Windows.

Я видел, что есть модуль apache под названием mod_auth_sspi, но я не мог найти, как установить его или даже реализовать (использовать) в своем коде.

Я использую Apache v2.4, PHP 5.6.8 на Windows Server 2008.

Решение

Итак … я узнал, как это сделать после нескольких часов поиска в Google … действительно, было бы проще найти ответ, но, тем не менее, вот оно:

1) Загрузите следующий модуль для вашей системы (32 бит 64 бит): https://www.apachehaus.net/modules/mod_authnz_sspi/

2) Вставьте файл в папку ваших модулей. /apache/modules/

3) Отредактируйте следующие файлы конфигурации:

3.1) php/php.ini : Раскомментировать extension=php_ldap.dll линия.

3,2) apache/conf/httpd.ini : Добавьте следующее в конец раздела LoadModules:

3.3) Найти отметьте и удалите открывающий и закрывающий теги вместе с его содержимым. Затем вставьте следующее:

Затем после перезапуска Apache все должно работать. Получить имя пользователя Windows через

Все об AuthType или авторизация в Apache

Здесь я расскажу о возможностях Apache защищать содержимое сервера либо его частей.

Директивы Apache для контроля доступа

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

Внимание! Если вы хотите использовать эти директивы в файле .htaccess, проверьте, что бы для вашего хоста директива AllowOverride корневого файла конфигурации Apache включала опцию Limit

Значения: Order (allow,deny | deny,allow)

Директива Order указывает порядок, в котором будет производиться чтение из директив Allow и Deny

* Allow,deny — сначала читаются директивы Allow. Если пользователя нет в этом списке, то он блокируется. Если же он есть, то далее считываются директивы Deny(процесс еще не закончен). Если же пользователь есть и там, то он блокируется. Если его там нет, то он пропускается. Т.е пользователь пропускается только при наличии только в списке Allow, но не в Deny
* Deny,allow — сначала обрабатываются директивы Deny и отсеиваются те пользователи, которые есть в этом списке. Любые другие пропускаются. Т.е пользователь пропускается всегда, но если его нет в списке Deny

Формат директив: (Allow | Deny) from (IP | IPs | all) (IP | IPs | all) : (IP | IPs | all)

Директивы Allow и Deny определяют клиентов, которым разрешить или запретить доступ к серверу.

Директивы допускают использование:

* Одиночного IP(IP) — обычный вид IP, например, 127.0.0.1
* Группы IP(IPs) — группа IP, например, для доступа, только из локальной сети, 192.168.1.0/24
* Любого IP(all) — обозначает любой IP

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

В этом файле указывается доступ только для клиентов из локальной сети или с IP 11.11.11.12

Часть файла httpd.conf

Так мы баним сайт для какого-нибудь одного IP
Контроль по имени пользователя или группе

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

Значения: AuthType (Basic | Digest)

Apache поддерживает 2 типа защиты содержания (директива AuthType):

* Basic — базовая авторизация. Шифрование используется я на обеих сторонах, но клиент передает пароль не надежно зашифрованным, т. к не используется ключ шифрования. Это крупный недостаток этого метода. Применяется алгоритм шифрования Base64
* Digest — аутентификация специальным кодом (дайджестом), который использует ключ, конкретно, имя пользователя, пароль, область, требующая аутентификацию, различную информацию о запросе и уникальный код данного запроса, который Apache присваивает каждому соединению. Это однонаправленный метод, и для того, что бы расшифровать это, стороннему человеку требуется слишком много информации об обеих сторонах. Но главный недостаток этого метода в том, что его не поддерживает ни один пользовательский браузер, хотя сейчас это уже, наверное, не так (данные на 2000 год). Этот метод обычно используется в специализированных системах

Читайте также:  Dell 1702 wireless windows 64 bit

Формат директивы: AuthName «String»

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

Формат директив: (AuthUserFile | AuthGroupFile) «String»

Внимание! Для работы этих директив необходим модуль Apache mod_auth, который подключается по умолчанию

Эти директивы определяют, соответственно, путь (абсолютный) к файлу, хранящему связки Имя:DES и путь (тоже абсолютный) к файлу, хранящему связки Группа:Имя Имя : Имя

Содержит информацию о допустимых именах пользователей и их паролях в формате Имя:DES, где DES — это название алгоритма шифрования. Файл можно создать стандартной консольной программой, входящей в состав Apache, htpasswd. Описание ее использования смотрите ниже

Эту директиву нужно указывать только, если вы указали значение для директивы Request(смотрите ниже) равном group

Этот файл содержит информацию о допустимых группах пользователях для входа. Формат файла: Группа:Имя Имя : Имя. Т.е только те пользователи, которые существуют и которые входят в группы, описанные в директиве Require(смотрите ниже), смогут войти

Значения: Require (user Имя Имя : Имя | group Группа Группа : Группа | valid-user

Эта директива определяет принцип аутентификации:

* User — только пользователи, указанные следующими через пробел, и указавшие верный пароль, смогут войти
* Group — только пользователи, входящие в группы, указанные следующие через пробел, и указавшие верный пароль, смогут войти. Указание директивы AuthGroupFile обязательно
* Valid-user — любой пользователь, существующий в файле AuthUserFile, и указавший верный пароль, сможет войти

На этом директивы, необходимые для метода AuthType Basic, перечислены. Другие директивы, относящиеся к методу AuthType Digest, я перечислять не буду, т. к они имеют узконаправленное действие и в общих системах не используются
Утилита Apache htpasswd

Эта консольная программа создает файлы, указываемые в директиве AuthUserFile. Файл хранит связки Имя:Пароль для доступа к защищенной части сайта

Обычно программа поставляется вместе с Apache и находиться в папке bin ее корневой папки

Формат вызова утилиты:

Параметры командной строки

* -с — создать новый файл. Если этот параметр не указан, и файл не существует, утилита выдаст ошибку и аварийно завершит работу. Внимание! Если файл уже существовал, он будет перезаписан
* -d — утилита будет использовать алгоритм шифрования DES (в C это функция crypt()). По умолчанию используется во всех ОС, но не в Windows
* -m — использовать алгоритм шифрования MD5, который является шифром по умолчанию в Windows
* -p — сохранить пароль в чистом виде, без шифрования. Работает только в Windows
* -s — утилита будет использовать алгоритм шифрования SHA
* -b — в нормальном режиме, без этой опции, утилита получает пароль вводом в стандартный входной поток. При использовании этой опции, после пути к файлу паролей должен идти пароль, и утилита получит пароль из этой опции. Утилита не будет ждать пользовательского ввода, она сразу возвратит управление в оболочку. Пример: htpasswd -b .htpasswd smhtpass

Здесь доступ разрешен по файлу .htpasswd для пользователей My, root, UUCP, hacker и guest. Тип авторизации Basic

Часть файла httpd.conf

Здесь доступ разрешен по тому же файлу с пользователями, но только с теми, кто входит в группы my или root, определенные в файле .htgroup

Для создания файла паролей для первого примера

Входим в shell и пишем такие команды

На этом я закончу свое описание здесь средств защиты данных web-сервером Apache. Все пожелания или вопросы можете оставлять по нижеследующим координатам

На данное время (Июль 2006 года) я пишу Content Managing System(CMS) под PHP 4+, MySQL 3.23.xx+ и Apache 1.3+, всем желающим посмотреть или присоединиться — пишите мне сюда же

Оцените статью