2013-02-06 23 views
6

Zanim zacznę, chciałbym zaznaczyć, że przeglądałem Stack Overflow i znalazłem inne podobne pytania - PHP_AUTH_USER not set? i HTTP Auth via PHP - PHP_AUTH_USER not set? - i te wskazywały, że zmienne $ _SERVER uwierzytelniania nie zostaną ustawione, jeśli serwer '' API '' jest ustawione na '' CGI/FCGI '', ale sprawdziłem moje wyjście '' phpinfo() '', a mój '' Server API '' jest ustawiony na '' Handler Apache 2.0 ''.

Ok, więc mam prosty skrypt w następujący sposób:

<?php 
    echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"]; 
?> 

... co Wołam zdalnie poprzez następujące:

wget -v --http-user=johnsmith --http-password=mypassword http://www.example.com/myscript.php 

... ale która wyprowadza tylko:

Username: , Password: 

Próbowałem również wywoływać skrypt przy użyciu PHP cURL i odpowiednio ustawić parametry uwierzytelniania w następujący sposób:

curl_setopt($ch, CURLOPT_USERPWD, "johnsmith:mypassword"); 

... ale otrzymuję taki sam wynik jak powyżej.

Każdy pomysł, co robię źle? Być może jest coś jeszcze, co muszę włączyć/skonfigurować?

+0

Czy wysyłasz poprawny kod odpowiedzi? –

+0

Dzięki Iganacio, czy mógłbyś wyjaśnić, co masz na myśli? –

Odpowiedz

5

mam w końcu odkrył, że odpowiedź dzięki z pomocą Naktibalda w ## php na irc.freenode.net

Poniższa strona podsumowuje problem: http://php.net/manual/en/features.http-auth.php

zacytować odpowiednie bity:

od PHP 4.3.0, aby uniemożliwić napisanie skryptu, który ujawnia hasło do strony, która została uwierzytelniona przez tradycyjnym zewnętrznym mechanizmem, zmienne PHP_AUTH nie zostanie ustawiony, jeśli jest włączone uwierzytelnianie zewnętrzne na th na danej stronie i tryb bezpieczny jest włączony. Bez względu na to, REMOTE_USER może służyć do identyfikacji użytkownika uwierzytelnionego zewnętrznie. Tak więc możesz użyć $ _SERVER ['REMOTE_USER'].

...

PHP wykorzystuje obecność dyrektywy AuthType celu ustalenia, czy autoryzacja zewnętrzna jest w istocie.

10

dla PHP-CGI:

w .htaccess dodać to:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 
</IfModule> 

i na początku skryptu dodać to:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); 
-4

to powinno być tak

echo "Username: " . $_SERVER[PHP_AUTH_USER] . ", Password: " . $_SERVER[PHP_AUTH_PW]; 
+4

jesteś w błędzie. http://www.php.net/manual/en/reserved.variables.server.php musisz użyć ciągów dla indeksu, więc musi to być: '$ _SERVER ['PHP_AUTH_USER']' itp. –

Powiązane problemy