Nella configurazione del registro Apache è possibile specificare che il nome utente dell'autorizzazione HTTP debba essere registrato. La maggior parte degli script PHP ha una propria autenticazione basata su cookie. È possibile in PHP fornire ad Apache un nome utente di autenticazione HTTP per la registrazione, anche se l'autenticazione è basata sui cookie? Se sì, come sarebbe il codice? Se no, quali sono le alternative?Metti il nome utente in apache access_log con PHP e senza autenticazione HTTP
risposta
Apache passa i dati tra i moduli nelle note . Se esegui PHP come modulo Apache, puoi utilizzare apache_note()
per ottenere e impostare le note. È quindi possibile includere the %{note_name}n
log format string per scrivere questo nel registro di accesso. Ciò non "ripulirà" alcun dato sul client.
In PHP:
apache_note('username', $username);
Nella configurazione del server:
LogFormat "%h %l %{username}n %t \"%r\" %>s %b" common_with_php_username
CustomLog logs/access_log common_with_php_username
Una possibilità è di memorizzare i nomi utente & session_ids in passato da qualche altra parte, e lasciare che il log scriva i valori del cookie in esso (in genere %{PHPSESSID}C
), che è possibile risalire.
Un'altra opzione sarebbe quella di inviare un colpo di testa con il nome utente al client, preferibilmente subito dopo l'session_start
:
PHP:
header('X-Php-Sess-User: '.$username);
CustomLog:
%{X-Php-Sess-User}o
Breve utilizzando un gestore Apache per toccare le strutture di dati auth * interne, la soluzione migliore è ricorrere alle variabili di ambiente. Si potrebbe impostare una variabile di ambiente di alto livello utilizzando apache_setenv nel codice PHP
apache_setenv('USERID','jrodriguez',true);
e quindi scrivere il valore nel file di registro con una voce LogFormat nella configurazione di Apache con "% {USERID} e" invece di " % u"
LogFormat "%v:%p %h %l %{USERID}e %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" envuid_combined
CustomLog /path/to/access.log envuid_combined
Naturalmente, le vere credenziali quando svolgono effettiva autenticazione HTTP sarebbe perduto per sempre, in modo da considerare il risparmio% u da qualche altra parte - sia in un nuovo campo o in un file di log in parallelo.
non sarebbe una variabile di ambiente essere globale e come tale essere inaffidabile –
@Esben Non sono sicuro esattamente cosa intendi, ma in generale no - una variabile di ambiente non è globale. La soluzione di cui sopra funziona perfettamente per me. – rjmunro
Dal Apache 2.4.7 Apache consente di copiare una risposta-header a una nota. Quindi, se non si esegue PHP come un modulo Apache (ma per esempio si usa PHP-FPM), e non si vuole anche che il valore di log sia inviato al client (cosa che succederebbe di solito se lo si imposta in un risposta-header), ecco un modo per farlo:
php:
header('X-Username: '.$username);
httpd.conf:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{username}n\"" logfmtname
vhost.conf:
CustomLog logs/vhost-access_log logfmtname
# copy response-header value to note
Header note X-Username username
# unset response-header so client won't get it
Header unset X-Username
- 1. Laravel 5: autenticazione HTTP Apache php
- 2. Ottieni il nome utente in Autenticazione moduli
- 3. Firebase Autenticazione senza e-mail come nome utente?
- 4. Autenticazione di sicurezza Spring: ottieni il nome utente senza SPRING_SECURITY_LAST_USERNAME
- 5. SSO - Prendi il nome utente AD con Apache
- 6. RCurl: autenticazione HTTP quando il sito risponde con il codice HTTP 401 senza autenticazione WWW
- 7. PHP e MYSQL Nome utente con sottolineatura
- 8. Nome utente WS-SecurityToken con Apache CXF
- 9. Autenticazione Digest HTTP
- 10. Autenticazione SOAP con PHP
- 11. login con nome utente o l'indirizzo e-mail in php
- 12. Nome utente URL in PHP?
- 13. php curl - accesso all'URL con autenticazione HTTP (serve aiuto)
- 14. Autenticazione utente senza stato sessione in ASP.NET
- 15. Autenticazione Windows richiede nome utente/password
- 16. Database + Autenticazione di Windows + Nome utente/password?
- 17. Autenticazione con Akka-Http
- 18. Autenticazione utente tramite LDAP da PHP
- 19. Backbone.js e autenticazione utente
- 20. Nome utente dell'API Google Drive + autenticazione password
- 21. Autenticazione Apache eccetto localhost
- 22. PHP - crittografare il nome utente e la password dell'altro sito
- 23. CouchApps e autenticazione utente
- 24. PHP e soluzione di autenticazione .htaccess
- 25. Autenticazione social con Apache Shiro
- 26. Proxy HTTP Apache basato sul nome host
- 27. Ottieni il nome utente di autenticazione HTTP di base da javascript?
- 28. Ottenere il nome utente da URL in PHP
- 29. XmlSlurper.parse (uri) con autenticazione di base HTTP
- 30. Logout con http autenticazione di base e plug restful_authentication
I non pensare sia una buona idea Perché non usare un logfile separato? –
Perché mi piacerebbe fare statistiche semplici con uno strumento come AWStats. – chiborg