Переменные $ _SERVER сбрасываются на мой хостинг под управлением CGI - PullRequest
2 голосов
/ 23 августа 2010

Переменные $ _SERVER ['PHP_AUTH_USER'] и $ _SERVER ['PHP_AUTH_PW'] возвращаются как пустые из-за настроек, которые имеет мой хостинг (работает на интерфейсе CGI). Есть ли работа вокруг, чтобы заставить их работать, поскольку мне нужно использовать их для аутентификации. Я не могу переместить хостинг или изменить интерфейс.

Я отправляю запросы авторизации через curl на URL / api / projects / ... который интерпретируется modrewrite, а затем обрабатывается в соответствии с правилами.

Когда я пытаюсь сделать это на моем локальном хосте, на котором запущен MAMP, или я использую другой хостинг, он работает нормально (не используя интерфейс CGI), но на сервере, на котором он мне нужен, переменные удаляются!

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 5 ]

2 голосов
/ 23 августа 2010

Согласно инструкции, эти переменные доступны только тогда, когда PHP работает как модуль Apache.http://php.net/manual/en/features.http-auth.php

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

1 голос
/ 23 августа 2010

Согласно документам , эти две переменные недоступны в режиме CGI.

Хуки HTTP-аутентификации в PHP доступны только в том случае, если они работают как модуль Apache.и, следовательно, недоступно в версии CGI.

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

0 голосов
/ 09 ноября 2011

Выезд

https://github.com/symfony/symfony/issues/1813

для обсуждения этого и подробного обходного пути.

0 голосов
/ 23 августа 2010

Веб-сервер Apache по умолчанию блокирует переменную среды HTTP_AUTHORIZATION для приложений CGI, которую PHP использует для заполнения PHP_AUTH_USER / PASS.Это поведение можно отключить, перекомпилировав Apache с установленным флагом SECURITY_HOLE_PASS_AUTHORIZATION .

«Дыра безопасности» заключается в том, что любые другие пользователи на общем сервере смогут видеть пароли пользователейаутентификация на вашем сайте.Является ли это на самом деле дырой в безопасности для вас, зависит;часто нет.

Если вы работаете на дешевом общем сервере, скорее всего, у вас не будет возможности перекомпилировать Apache.

Знаете ли вы, можно ли использоватьработать примерно так:

Да, так и должно быть, если у вас есть mod_rewrite в наличии.(Предостережения о том, что это потенциально «дыра в безопасности», все еще применимы.)

Это, однако, некрасиво и усложняет развертывание.Также есть несколько проблем с приведенным примером сценария (использование explode отбрасывает любые символы : в пароле, а echo s без правильного использования htmlspecialchars() представляет уязвимость XSS.)

Такая ерунда является одной из причин, по которой HTTP-аутентификация становится все более непопулярной.На большинстве сайтов вместо этого используется аутентификация на основе форм и файлов cookie.Для API вы, как правило, имеете собственную аутентификацию на основе токенов, а не полагаетесь на обычную аутентификацию.

0 голосов
/ 23 августа 2010

, если это для автоматического использования, нет необходимости использовать HTTP-аутентификацию вообще. просто отправьте секретный токен в качестве учетных данных.

http://example.com/service.php?auth=A235BDA74456CC3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...