Ho un amico che ha un sito Web sviluppato in PHP su cui possiamo sfogliare tutti i suoi file uno dopo l'altro (ovviamente, non possiamo leggere il contenuto dei file PHP).
Pensi che questo sia un buco di sicurezza? Se sì, in che senso?
Quello che stai descrivendo è un normale elenco di directory
Dipersé,l'elencodelledirectoryènotunproblemadisicurezza.Selasicurezzadeltuosistemavienecompromessadopoaverscopertolastrutturadeituoifileedirectory,alloratiaffidia
Tuttavia , come parte di una buona politica di sicurezza, dopo l'implementazione di adeguate misure di sicurezza, è utile oscurare le parti funzionanti del sistema. Minore è la tua dimostrazione del tuo sistema, minori sono le informazioni che un intruso può avere su di te, il che significa che stai rendendo più difficile il loro lavoro.
"Allora, cosa dovrei fare?" tu chiedi. Semplice: disabilita l'elenco delle directory nelle configurazioni del tuo server web. In Apache, vai al tuo httpd.conf
e trova la riga dove dice
Options Includes Indexes
Rimuovi Indexes
dalla linea, quindi riavvia il tuo apache.
Per aggiungere alle risposte di @adnan e @ william-calvin:
"Potrebbe" essere un problema;)
Rileva i nomi dei file accessibili solo, ad esempio, agli utenti autenticati (si pensi a "change_settings.php" per gli utenti che hanno effettuato l'accesso). Ora questo di per sé non è un problema. Se il suo sito web è ben scritto, eseguirà i necessari controlli di autorizzazione prima di caricare ciascun file. Da un altro punto di vista, un buon crawler / spider "mapperà" tutti i file che sono comunque accessibili.
Se è disordinato con i file di backup (pensa: secret.bak o blah.php.old), allora altri saranno in grado di leggere questi file. Questo è anche il caso di file phpinfo () e db_dump.sql veloci.
Potrebbe includere file e avere questi con un'estensione non php, come db.inc, a seconda della configurazione di apache, un utente malintenzionato potrebbe leggerli.
Quindi, come spiegato dagli altri - è una cattiva pratica. Fornisce più informazioni di quanto dovrebbe.
Sì. Questo è sicuramente un problema.
Se conosco la tua struttura, sarò in grado di comprendere meglio il tuo sistema, il che mi rende più facile attaccare il tuo sistema.
Si consiglia di disattivare l'elenco delle directory (consulta questo tutorial se sono su CPanel)
Meno sanno gli hacker, più è difficile da pensare ..
Sì, per quanto riguarda le risposte di cui sopra, non voglio condividere le stesse informazioni, ma un vero evento accaduto alla mia organizzazione.
Avevamo un server web (front-end di cui i clienti possono vedere le informazioni del proprio account internet, la capacità di ricaricare, ecc.)
Lo sviluppatore ha caricato un BigDump per il backup dei dati del server A triplo, mentre un hacker ha esaminato la directory in ascolto e ha trovato il dump file che contiene tutti i gratta e vinci e, si spera, mi ha segnalato e abbiamo risolto questo problema .
Come accennato, facendo affidamento sulla sicurezza attraverso l'oscurità, è meglio disabilitare l'ascolto delle directory, ho fatto una politica per la mia organizzazione che questa funzione dovrebbe essere disabilitata in tutti i server web.
Per aggiungere alla risposta di Adnan, alcuni framework PHP, come PyroCMS, risolvono il problema nella tua domanda usando una combinazione di file .htaccess
e con un file indice, chiamato qualcosa come index.php
, in ogni directory.
Un file .htaccess
è come un'estensione della configurazione del tuo server in file come php.config
, ma può essere incluso direttamente nelle cartelle del sito, anche se in alcuni casi potrebbero non essere consentiti o potrebbero non funzionare a causa del server File. Inoltre, puoi utilizzarli anche se non hai accesso ai file del server, ad esempio se hai un sito nel cloud da qualche parte. Possono essere utilizzati per limitare l'accesso ai file nella directory in cui si trovano o nelle cartelle secondarie. PyroCMS e altri framework hanno spesso un file htaccess
in ogni singola cartella, molti dei quali limitano o negano l'accesso alla cartella e a tutte le sue sottocartelle.
index.php
è una delle pagine predefinite da mostrare quando l'URL punta alla cartella, sebbene sia possibile configurare queste pagine predefinite nei file del server. Ad esempio, se l'utente naviga su example.com/folder
, e non ci sono nessuno di questi file predefiniti in questa directory, la pagina mostrerà ciò che probabilmente vedrà il tuo amico, che è probabilmente la vista che Adnan mostra nella sua risposta. Tuttavia, se c'è un file index.php
in quella cartella, la pagina mostrerà invece ciò che è in <site folder>/folder/index.php
. I framework PHP hanno spesso un index.php
in ogni o quasi ogni cartella e sottocartella per te. Molti di questi file hanno qualcosa del tipo:
<div>Forbidden!!!</div>
<div>Please don't go here! It's very sensitive!</div>
Poiché questi file .htaccess
e index.php
sono già inseriti in tutte queste cartelle, non devi farlo tu stesso, anche se puoi eliminarli se vuoi o devi adattare il tuo sito. Anche se in definitiva non utilizzi questi framework, scaricare un paio e vedere cosa fanno può essere utile per progettare il tuo sito. Fai attenzione se lo fai, anche se molti di questi sono centinaia di megabyte.
A proposito, sì, è una cattiva pratica avere questi file sfogliabili. Il punto con questa risposta è che ci sono strumenti che è possibile utilizzare per evitare di dover ripetere codice boilerplate migliaia di volte, a volte letteralmente, e solo così gli argomenti in questa domanda riguardano il codice boilerplate con cui questi strumenti possono essere d'aiuto.
BTW, non c'è httpd.conf
in Ubuntu (al momento in 14.04, non cercarlo, modificherai apache2.conf
file).
Per salvare il tuo sito Web basato su PHP dagli script kiddies, puoi leggere il mio lungo tutorial per l'indurimento di WordPress (ho fornito il link per la protezione del copyright più probabilmente conoscerai altri punti vulnerabili sconosciuti). WordPress è solo un esempio, in realtà il contenuto è applicabile a qualsiasi sito web PHP-MySQL o persino PHP.
In secondo luogo, non correlato alla domanda originale; Anche il kernel di Linux dovrebbe essere indurito. Puoi vedere il mio succo - link
Normalmente PHP non si apre nel browser come un file di testo, ma mostra il percorso, il nome e probabilmente indica che l'amministratore del server non ha molta esperienza e lo rende più vulnerabile.
Non provare a controllare dal livello .htaccess
, mantieni .htaccess
il più leggero possibile. In realtà è nella directory pubblica ...