Risposta breve: si
La risposta a questa domanda è un sì inequivocabile , e dire il contrario è completamente irresponsabile .
Risposta lunga: un esempio del mondo reale
Consentitemi di fornire un esempio molto reale, dal mio server molto reale, in cui lo spostamento wp-config.php
all'esterno della radice Web ha impedito in modo specifico l'acquisizione dei suoi contenuti .
Il bug:
Dai un'occhiata a questa descrizione di un bug in Plesk (risolto in 11.0.9 MU # 27):
Plesk reimposta l'inoltro del sottodominio dopo aver sincronizzato l'abbonamento con il piano di hosting (117199)
Sembra innocuo, vero?
Bene, ecco cosa ho fatto per attivare questo bug:
- Configurare un sottodominio per reindirizzare a un altro URL (ad esempio,
site.staging.server.com
a site-staging.ssl.server.com
).
- Modificato il piano di servizio dell'abbonamento (ad es. La sua configurazione PHP).
Quando l'ho fatto, Plesk ha ripristinato le impostazioni predefinite del sottodominio: pubblicazione dei contenuti di ~/httpdocs/
, senza interpreti (ad esempio PHP) attivi.
E non me ne sono accorto. Per settimane.
Il risultato:
- Con
wp-config.php
nel web root, una richiesta /wp-config.php
avrebbe scaricato il file di configurazione di WordPress.
- Con l'
wp-config.php
esterno del Web root, una richiesta per /wp-config.php
scaricare un file completamente innocuo. wp-config.php
Impossibile scaricare il file reale .
Pertanto, è ovvio che spostarsi wp-config.php
al di fuori della radice del Web ha benefici di sicurezza in buona fede nel mondo reale .
Come spostarsi wp-config.php
in qualsiasi posizione sul server
WordPress cercherà automaticamente una directory sopra l'installazione di WordPress per il tuo wp-config.php
file, quindi se è lì che lo hai spostato, il gioco è fatto!
E se lo avessi spostato da qualche altra parte? Facile. Creane uno nuovo wp-config.php
nella directory di WordPress con il seguente codice:
<?php
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');
(Assicurati di cambiare il percorso sopra nel percorso effettivo del tuo wp-config.php
file trasferito .)
Se riscontri un problema con open_basedir
, aggiungi il nuovo percorso alla open_basedir
direttiva nella configurazione di PHP:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
Questo è tutto!
Separando le argomentazioni contrarie
Ogni argomento contro lo spostamento wp-config.php
all'esterno della radice del web dipende da false assunzioni.
Argomento 1: Se PHP è disabilitato, sono già presenti
L'unico modo in cui qualcuno vedrà che il contenuto di [ wp-config.php
] è se eludono l'interprete PHP dei tuoi server ... Se ciò accade, sei già nei guai: hanno accesso diretto al tuo server.
FALSO : Lo scenario che descrivo sopra è il risultato di un'errata configurazione, non di un'intrusione.
Argomento 2: la disabilitazione accidentale di PHP è rara e quindi insignificante
Se un attaccante ha abbastanza accesso per cambiare il gestore PHP, sei già fregato. I cambiamenti accidentali sono molto rari nella mia esperienza e in tal caso sarebbe facile cambiare la password.
FALSO : Lo scenario che descrivo sopra è il risultato di un bug in un comune software del server, che influenza una configurazione comune del server. Questo non è certo "raro" (e inoltre sicurezza significa preoccuparsi del raro scenario).
WTF : la modifica della password dopo un'intrusione non aiuta molto se sono state raccolte informazioni sensibili durante l'intrusione. Davvero, pensiamo ancora che WordPress sia utilizzato solo per i blog casuali e che gli aggressori siano interessati solo alla defacement? Preoccupiamoci di proteggere il nostro server, non solo di ripristinarlo dopo che qualcuno è entrato.
Argomento 3: Negare l'accesso a wp-config.php
è abbastanza buono
È possibile limitare l'accesso al file tramite la configurazione dell'host virtuale o
.htaccess
- limitare efficacemente l'accesso esterno al file nello stesso modo in cui si sposterebbe all'esterno della radice del documento.
FALSO : Immagina che i valori predefiniti del tuo server per un host virtuale siano: no PHP, no .htaccess
, allow from all
(quasi insolito in un ambiente di produzione). Se la tua configurazione viene in qualche modo ripristinata durante un'operazione di routine - come, diciamo, un aggiornamento del pannello - tutto tornerà al suo stato predefinito e sarai esposto.
Se il modello di sicurezza ha esito negativo quando le impostazioni vengono ripristinate accidentalmente ai valori predefiniti, è necessaria maggiore sicurezza.
WTF : Perché qualcuno dovrebbe specificamente raccomandare meno livelli di sicurezza? Le auto costose non hanno solo le serrature; hanno anche allarmi, immobilizzatori e localizzatori GPS. Se qualcosa vale la pena proteggere, fallo bene.
Argomento 4: L'accesso non autorizzato a wp-config.php
non è un grosso problema
Le informazioni sul database sono davvero le uniche cose sensibili in [ wp-config.php
].
FALSO : le chiavi e i sali di autenticazione possono essere utilizzati in qualsiasi numero di potenziali attacchi di dirottamento.
WTF : Anche se le credenziali del database fossero l'unica cosa wp-config.php
, dovresti essere terrorizzato dal fatto che un attaccante ci metta le mani sopra.
Argomento 5: spostarsi wp-config.php
all'esterno della radice Web rende in realtà un server meno sicuro
Devi ancora consentire l'accesso a WordPress [ wp-config.php
], quindi devi espanderlo open_basedir
per includere la directory sopra la radice del documento.
FALSO : Supponendo che wp-config.php
sia attivo httpdocs/
, basta spostarlo su ../phpdocs/
e impostare open_basedir
per includere solo httpdocs/
e phpdocs/
. Per esempio:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
(Ricordati di includere sempre /tmp/
, o la tua tmp/
directory utente , se ne hai una.)
Conclusione: i file di configurazione devono sempre trovarsi sempre all'esterno della radice Web
Se ti interessa la sicurezza, ti sposterai wp-config.php
al di fuori della tua radice web.