2016-06-01 13 views
1

Ich habe einen NGINX-Server und ich benutze Apache-Dienstprogramm für Passwort-Anforderung (.htpasswd). Es funktioniert meistens gut. Die im Anschluss an diese Arbeit gut:NGINX - Warum kann ich die Passwort-Authentifizierung umgehen?

example.com/admin 
example.com/admin/ 
example.com/admin/index 

aber ... Wenn ich example.com/admin/index.php eingeben und geben Sie kein Passwort überhaupt und drücken Sie „Abbruch“ der Server-Show ist der index.php (ohne CSS oder JS-Dateien). Ich denke mein PHP-FPM ist das Problem. Bitte werfen Sie einen Blick:

location/{ 
    try_files $uri $uri.html $uri/ @extensionless-php; 
    index index.html index.htm index.php; 
} 

location @extensionless-php { 
    rewrite ^(.*)$ $1.php last; 
} 

location /admin { 
    auth_basic "Restricted"; 
    auth_basic_user_file /admin/.htpasswd; 
} 

location ~ \.php$ { 
    fastcgi_pass   127.0.0.1:9000; 
    include     fastcgi_params; 
    fastcgi_param   SCRIPT_FILENAME $document_root$ 
} 
+0

See [diese] (http://nginx.org/en/docs/http/request_processing.html), aber im Grunde Ihre Authentifizierung gilt für 'Standort/admin' und die' .php'-Dateien werden von 'Standort verarbeitet ~ \ .php $ '. –

+0

Ich verstehe. Aber wie repariere ich das? Ich habe keine Ahnung. –

Antwort

1

Gerade in den letzten zwei Standorten in Ihrer Frage suchen:

location ^~ /admin { 
    auth_basic "Restricted"; 
    auth_basic_user_file /admin/.htpasswd; 

    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     include  fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 
} 

location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    include  fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

den ^~ Modifikator Hinzufügen macht den location ^~ /admin Block Vorrang vor den anderen regex Blöcke nehmen (insbesondere die bestehenden location ~ \.php$ Block). Daher werden die Authentifizierungsregeln einheitlich auf jeden URI angewendet, der mit /admin beginnt. Details finden Sie unter this document.

PHP brechen zu vermeiden, wird der location ~ \.php$ Block innerhalb des location ^~ /admin Block dupliziert URIs zu verarbeiten, die mit .php mit /admin beginnen und enden.

+0

Schön. Der Bug ist jetzt behoben. Aber jetzt sagt er immer 403 Verboten. Ich habe die Dir-Berechtigungen überprüft, aber da ist alles in Ordnung. –

+0

403 kann verursacht werden, wenn der URI ein leeres Verzeichnis ist (wie '/ admin' oder'/admin/') und keine' index'- oder 'try_files'-Regel existiert, um es zu lösen. Sie könnten ein 'index' bei Hinzufügen oder' try_files' in den 'Lage^~/admin' Block aussehen sollen, das gewünschte Verhalten zu erhalten. –

+0

Ich habe es aber immer noch 403 versucht. Auch wenn ich den URI auf die Datei zeige. Hast du eine Idee warum? –