2013-06-17 29 views
5

Per motivi di sicurezza, c'è un certo file sul mio server web a cui voglio essere in grado di monitorare l'accesso. Ogni volta che si accede, voglio avere una voce aggiunta a una tabella di log MySQL. In questo modo, posso rispondere attivamente alle violazioni della sicurezza dall'interno dell'applicazione web.Come si controlla un file su un server Web e si registra ogni accesso, idealmente tramite indirizzo IP, in un database (MySQL)?

+0

È anche possibile guardare gli eventi di accesso ai file della directory da un programma, ad esempio gli o/s genereranno un evento e chiameranno la routine del programma. Basta avere quel registro per il database e fare qualsiasi altra cosa tu voglia. per esempio,. inviare messaggi SMS, ecc. forse interessante? http://stackoverflow.com/questions/4205815/monitoring-file-and-directory-access-on-linux. È simile anche su Windows. –

risposta

1

Il server HTTP Apache fornisce funzionalità di registrazione.

Il registro di accesso del server registra tutte le richieste elaborate dal server. La posizione e il contenuto del registro di accesso sono controllati dalla direttiva CustomLog. La direttiva LogFormat può essere utilizzata per semplificare la selezione del contenuto dei registri. Questa sezione descrive come configurare il server per registrare le informazioni nel registro di accesso.

Può essere utilizzato per scrivere il registro in un file. Se è necessario archiviare in una tabella MySQL, eseguire un processo cron per importare il file nel database.

Ulteriori informazioni sui log è qui: http://httpd.apache.org/docs/1.3/logs.html#accesslog

0

Il file può essere raggiunto da tre punti:

  1. Accesso diretto filesystem
  2. Chiama per l'url come www.example.com/importantfile.jpg (apache serve il file)
  3. Chiama su uno script php sul tuo server www.example.com/readfile.php?name=important.jpg che legge il file.

Se si è interessati solo al caso 2, controllare la soluzione di Rishi Dua.

Ma se si desidera altro, è necessario scrivere uno script con la chiamata fileatime() e aggiungerlo a cron per eseguire ogni minuto, ad esempio.

Il pseudocodice per esso:

<?php 
$previous_access_time = get_previous_access_time(); // get the previous last access time from you remembered in db or textfile or whatever 
$current_access_time = fileatime('path/to/very_important_file.jpg'); 
if ($previous_access_time != $current_access_time) { 
    log_access_to_db(); 
    save_new_access_time(); // update the new last access time 
} 

Questa soluzione presenta però alcuni problemi. Innanzitutto è possibile ottenere solo il tempo di accesso ma non l'ID utente o l'IP di chi ha effettuato l'accesso al file. Secondo, come dice il manuale, alcuni sistemi Unix non aggiornano il tempo di accesso e quindi la soluzione fallirebbe.

Se siete seriamente preoccupato per la sicurezza, allora io penso che si debba verificare la presenza di qualche revisione util come this

1

Il suo stato rimosso dal PHP7 ma per chiunque altro che trova questo post ci sono una serie di opzioni all'interno l'estensione FAM (ora PECL). Questa funzione http://php.net/manual/en/function.fam-monitor-file.php sembra descrivere ciò che è necessario qui

Inoltre, è possibile accedere a molti dettagli sullo stato dei file con http://php.net/manual/en/function.stat.php. Inseriscilo in un cron o in uno script guidato dal sonno e potrai vedere quando è cambiato.