Spostare wp-config fuori dalla root web è davvero vantaggioso?

13 lug 2012, 18:26:11
Visualizzazioni: 76.6K
Voti: 156

Una delle best practice di sicurezza più comuni al giorno d'oggi sembra essere spostare wp-config.php una directory più in alto rispetto alla document root del vhost. Non ho mai trovato una buona spiegazione per questo, ma presumo sia per minimizzare il rischio che uno script malevolo o infetto all'interno della webroot possa leggere la password del database.

Tuttavia, devi comunque permettere a WordPress di accedervi, quindi devi espandere open_basedir per includere la directory sopra la document root. Questo non vanifica l'intero scopo e potenzialmente espone i log del server, i backup, ecc. agli attaccanti?

Oppure la tecnica cerca solo di prevenire una situazione in cui wp-config.php verrebbe mostrato come testo normale a chiunque richieda http://example.com/wp-config.php, invece di essere interpretato dal motore PHP? Questo sembra un caso molto raro e non compenserebbe gli svantaggi dell'esporre log/backup/ecc alle richieste HTTP.

Forse è possibile spostarlo fuori dalla document root in alcune configurazioni di hosting senza esporre altri file, ma non in altre configurazioni?


Conclusione: Dopo molte discussioni su questo argomento, sono emerse due risposte che ritengo debbano essere considerate quelle autorevoli. Aaron Adams presenta una buona argomentazione a favore dello spostamento di wp-config, e chrisguitarguy presenta una buona argomentazione contro. Queste sono le due risposte che dovresti leggere se sei nuovo alla discussione e non vuoi leggere l'intero thread. Le altre risposte sono ridondanti o imprecise.

4
Commenti

Non è davvero necessario inserire la tua scelta di risposte e rifiutare tutte le altre all'interno della tua domanda. Come puoi vedere qui sotto, è proprio per questo che esiste il sistema di voto di stackexchange: per votare le risposte che hanno senso per le persone, mentre chi pone le domande dovrebbe utilizzare il meccanismo della "risposta accettata" e i propri voti positivi/negativi.

Kzqai Kzqai
20 gen 2014 18:53:59

Non lo faccio per il 99% delle domande che ho posto, ma pensavo fosse appropriato in questo caso specifico. Ci sono 8 risposte alla domanda, alcune delle quali sono piuttosto lunghe/complesse e altre che hanno molti voti nonostante contengano informazioni inesatte o non aggiungano nulla alla discussione. Credo che offrire una conclusione semi-autorevole sia utile per chi legge il thread per la prima volta. Come sempre, i lettori sono liberi di farsi un'opinione; sto solo offrendo il mio punto di vista come OP.

Ian Dunn Ian Dunn
21 gen 2014 02:15:01

@Kzqai: Il "sistema di voto di stackexchange" è un processo democratico, e i partecipanti spesso 1) non hanno chiaro cosa stia effettivamente chiedendo o cercando di risolvere l'OP, e 2) non comprendono la validità di una particolare risposta. Dopo che le risposte sono arrivate e i voti sono stati espressi, è più che utile che l'OP chiarisca quali risposte hanno fornito un aiuto. Dopotutto, l'OP è l'unico che sa, e vorrei che più OP lo facessero. Sì, le persone "votano le risposte che hanno senso per loro", ma lasciamo che l'OP abbia l'ultima parola su ciò che ha senso per lui.

Mac Mac
14 lug 2017 16:55:12

La tua domanda è valida. Tuttavia, i tuoi commenti alle risposte mostrano che hai in mente un setup molto specifico con vincoli esterni molto reali (cioè non controllati da te). Sarebbe stato più corretto dichiararli fin dall'inizio. Fa differenza se ho il controllo completo del server web e PHP così come di systemd, diciamo, o se open_basedir è il mio unico modo per influenzare la sicurezza in modo tangibile. Inoltre: il "buon caso contro" dovrebbe indicare in che modo è dannoso, piuttosto che elencare i motivi per cui questa singola misura potrebbe non essere sufficiente. E tieni presente il pubblico.

0xC0000022L 0xC0000022L
18 ago 2021 11:32:13
Tutte le risposte alla domanda 10
16
158

Risposta breve: sì

La risposta a questa domanda è e dire il contrario è probabilmente irresponsabile.


Risposta lunga: un esempio reale

Permettimi di fornire un esempio molto reale, dal mio server molto reale, dove spostare wp-config.php al di fuori della root web ha specificamente impedito che il suo contenuto venisse catturato.

Il bug:

Dai un'occhiata a questa descrizione di un bug in Plesk (risolto nella versione 11.0.9 MU#27):

Plesk reimposta il forwarding dei sottodomini dopo la sincronizzazione dell'abbonamento con il piano di hosting (117199)

Sembra innocuo, vero?

Ecco cosa ho fatto per attivare questo bug:

  1. Ho configurato un sottodominio per reindirizzare a un altro URL (ad esempio site.staging.server.com a site-staging.ssl.server.com).
  2. Ho cambiato il piano di servizio dell'abbonamento (ad esempio la sua configurazione PHP).

Quando ho fatto questo, Plesk ha ripristinato il sottodominio alle impostazioni predefinite: servendo i contenuti di ~/httpdocs/, senza interpreti (ad esempio PHP) attivi.

E non me ne sono accorto. Per settimane.

Il risultato:

  • Con wp-config.php nella root web, una richiesta a /wp-config.php avrebbe scaricato il file di configurazione di WordPress.
  • Con wp-config.php al di fuori della root web, una richiesta a /wp-config.php scaricava un file completamente innocuo. Il vero file wp-config.php non poteva essere scaricato.

Quindi, è ovvio che spostare wp-config.php al di fuori della root web può avere benefici di sicurezza reali nel mondo reale.


Come spostare wp-config.php in qualsiasi posizione sul tuo server

WordPress cercherà automaticamente una directory sopra la tua installazione di WordPress per il tuo file wp-config.php, quindi se l'hai spostato lì, hai finito!

Ma cosa succede se l'hai spostato altrove? Facile. Crea un nuovo wp-config.php nella directory di WordPress con il seguente codice:

<?php

/** Percorso assoluto alla directory di WordPress. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

/** Posizione della tua configurazione WordPress. */
require_once(ABSPATH . '../phpdocs/wp-config.php');

(Assicurati di cambiare il percorso sopra con il percorso effettivo del tuo file wp-config.php spostato.)

Se incontri un problema con open_basedir, aggiungi semplicemente il nuovo percorso alla direttiva open_basedir nella tua configurazione PHP:

open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"

Ecco fatto!


Affrontare argomenti contrari

Ogni argomento contro lo spostamento di wp-config.php al di fuori della root web sembra basarsi su presupposti falsi.

Argomento 1: Se PHP è disabilitato, sono già dentro

L'unico modo in cui qualcuno potrà vedere il contenuto di [wp-config.php] è se aggirano l'interprete PHP del tuo server… Se ciò accade, sei già nei guai: hanno accesso diretto al tuo server.

FALSO: Lo scenario che descrivo sopra è il risultato di una errata configurazione, non di un'intrusione.

Argomento 2: Disabilitare accidentalmente PHP è raro, e quindi insignificante

Se un attaccante ha abbastanza accesso per cambiare il gestore PHP, sei già spacciato. I cambiamenti accidentali sono molto rari nella mia esperienza, e in quel caso sarebbe facile cambiare la password.

FALSO: Lo scenario che descrivo sopra è il risultato di un bug in un comune software di server, che colpisce una configurazione comune di server. Questo è difficilmente "raro" (e comunque, la sicurezza significa preoccuparsi dello scenario raro).

Cambiare la password dopo un'intrusione non aiuta molto se le informazioni sensibili sono state raccolte durante l'intrusione. Davvero, pensiamo ancora che WordPress sia usato solo per blogging casuale, e che gli attaccanti 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 è sufficiente

Puoi limitare l'accesso al file tramite la configurazione del tuo virtual host o .htaccess – limitando efficacemente l'accesso esterno al file nello stesso modo in cui lo farebbe spostarlo al di fuori della root del documento.

FALSO: Immagina che le impostazioni predefinite del tuo server per un virtual host siano: no PHP, no .htaccess, allow from all (difficilmente insolito in un ambiente di produzione). Se la tua configurazione viene in qualche modo resettata durante un'operazione di routine – come, ad esempio, un aggiornamento del pannello – tutto tornerà allo stato predefinito, e sarai esposto.

Se il tuo modello di sicurezza fallisce quando le impostazioni vengono accidentalmente reimpostate ai valori predefiniti, probabilmente hai bisogno di più sicurezza.

Perché qualcuno dovrebbe specificamente raccomandare meno livelli di sicurezza? Le auto costose non hanno solo serrature; hanno anche allarmi, immobilizzatori e tracker 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 del database sono davvero le uniche cose sensibili in [wp-config.php].

FALSO: Le chiavi di autenticazione e i sali possono essere usati in qualsiasi numero di potenziali attacchi di hijacking.

Anche se le credenziali del database fossero l'unica cosa in wp-config.php, dovresti essere terrorizzato che un attaccante possa metterci le mani sopra.

Argomento 5: Spostare wp-config.php al di fuori della root web rende effettivamente un server meno sicuro

Devi comunque permettere a WordPress di accedere a [wp-config.php], quindi devi espandere open_basedir per includere la directory sopra la root del documento.

FALSO: Assumendo che wp-config.php sia in httpdocs/, spostalo semplicemente in ../phpdocs/, e imposta open_basedir per includere solo httpdocs/ e phpdocs/. Ad esempio:

open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"

(Ricorda di includere sempre /tmp/, o la tua directory tmp/ utente, se ne hai una.)


Conclusione: i file di configurazione dovrebbero sempre sempre sempre essere posizionati al di fuori della root web

Se ti interessa la sicurezza, dovresti spostare wp-config.php al di fuori della tua root web.

4 dic 2012 21:29:58
Commenti

Se hai un bug in Apache, Linux o nel cervello dell'amministratore, sei fritto in ogni caso. Nel tuo scenario non spieghi perché è più probabile che una configurazione errata avvenga alla radice del sito web rispetto a qualsiasi altro posto sul server. Un Apache configurato male può probabilmente accedere a /../config.php tanto facilmente quanto a /config.php

Mark Kaplun Mark Kaplun
4 dic 2012 23:14:30

Non sei "fritto in ogni caso." È molto probabile, e persino dimostrabile, che un bug possa ripristinare la root web al suo valore predefinito, nel qual caso non sei "fritto" – il tuo wp-config.php rimane al sicuro. Ed è estremamente improbabile – così tanto da essere praticamente impossibile – che un bug ripristini arbitrariamente la root web esattamente alla directory in cui hai posizionato il tuo wp-config.php.

Aaron Adams Aaron Adams
4 dic 2012 23:23:34

Quanto è probabile questo tipo di bug? Non sono un esperto di sicurezza, ma non ho mai sentito parlare di questo vettore di attacco utilizzato nella pratica. Sono contrario a raccomandare questo metodo perché una volta che devi mantenere il tuo sito, non sai dove si trova il tuo wp-config e probabilmente invaliderebbe la maggior parte dei tutorial che toccano quel file in qualche modo. Tu, io e il resto dei commentatori qui capiremmo cosa è successo, ma per le persone meno esperte sarebbe un grande e lungo momento di WTF.

Mark Kaplun Mark Kaplun
5 dic 2012 07:46:36

@MarkKaplun "Le persone che non leggono Stack Exchange potrebbero confondersi" è un argomento piuttosto debole contro una pratica di sicurezza consigliata su Stack Exchange. Quando più persone comprendono i reali pericoli di lasciare file di configurazione sensibili all'interno della root web, più persone sposteranno quei file fuori dalla root web, e più tutorial su WordPress verranno scritti per aiutare l'utente a individuare wp-config.php. Se pensi che la convenienza sia più importante della sicurezza, questa è la tua opinione; allora, però, rendi chiaro che stai consigliando agli utenti di dare priorità alla convenienza rispetto alla sicurezza.

Aaron Adams Aaron Adams
5 dic 2012 20:27:27

Ciao Aaron, grazie per la risposta riflessiva e dettagliata. Hai ragione sul fatto che cambiare semplicemente la password dopo un'intrusione non sia sufficiente. Tuttavia, non sono ancora convinto dalla tua aneddoto su Plesk. È sicuramente un problema, ma non credo che spostare wp-config sia la soluzione appropriata a quel problema. Lo stesso vale per il ripristino della configurazione del vhost, ecc. Se la tua applicazione ha bisogno di abbastanza sicurezza da preoccuparti di quel tipo di vulnerabilità, allora devi affrontarle in modo più diretto. Ad esempio, non usare Plesk, perché sarà sempre vulnerabile; assicurati che la configurazione del vhost sia sicura di default...

Ian Dunn Ian Dunn
6 dic 2012 01:47:29

...usa la gestione della configurazione per documentare e applicare automaticamente tutti gli aspetti del sistema, ecc. Si potrebbe sostenere che spostare wp-config sia un'alternativa approssimativa a tecniche più professionali, e va bene, ma non credo che debba essere presentato come una soluzione adeguata. Per quanto riguarda spostarlo in httpdocs/../phpdocs, per quanto ne so, WordPress cercherà il file solo una directory sopra ABSPATH, quindi non è possibile.

Ian Dunn Ian Dunn
6 dic 2012 01:48:57

@IanDunn In realtà, è facile spostare wp-config.php in una posizione arbitraria. Ho aggiunto le istruzioni alla mia risposta; basta creare un file wp-config.php fittizio nella directory di WordPress che faccia riferimento alla posizione di quello reale.

Aaron Adams Aaron Adams
6 dic 2012 06:07:18

Questa risposta è perfetta. La mia compagnia di hosting ha avuto un guasto all'array di dischi. Quando tutto è stato risolto, hanno ripristinato il sistema SOLO PARZIALMENTE. Si è scoperto che hanno usato una serie di script cPanel/WHM per ricostruire i file httpd.conf in modo errato. Fortunatamente avevo già wp-config.php fuori dalla root del documento, ma se non l'avessi fatto, i contenuti sarebbero stati lì per chiunque. Sì, è raro, ma come notato, sono i casi rari quelli di cui devi preoccuparti. Inoltre, affermare che "le persone semplici sarebbero perse" è una scusa pessima per avere MENO sicurezza.

Lance Cleveland Lance Cleveland
6 dic 2012 07:46:18

È un ottimo punto, Aaron. Sono ancora un po' scettico per le ragioni che ho menzionato in questo e altri thread di commenti, ma mi hai convinto che ha più merito di quanto pensassi inizialmente. Almeno, se fatto correttamente, non penso che possa far male. Ho ancora un problema con il fatto che la maggior parte delle persone che lo promuovono non sembrano capire le ragioni, e il modo in cui lo insegnano spesso porterebbe a esporre la directory sopra httpdocs, ma hai aiutato a affrontare questi problemi nella tua risposta.

Ian Dunn Ian Dunn
6 dic 2012 18:56:00

@IanDunn Sono completamente d'accordo con te sul fatto che la maggior parte delle persone che consigliano di spostare wp-config.php in una directory superiore non capisca realmente la sicurezza del server. Sono le stesse persone che consiglierebbero altrettanto rapidamente chmod 777 su .htaccess, un file che potrebbe facilmente essere utilizzato per reindirizzare gli utenti verso siti di phishing. Ad essere sinceri, questo sembra rappresentativo dello stato generale della comunità WordPress; c'è una quantità sorprendente di codice scadente in giro, e a causa delle dimensioni della comunità, si diffonde. Tutto ciò che possiamo fare è cercare di educare meglio le persone sui rischi.

Aaron Adams Aaron Adams
7 dic 2012 05:16:58

@CharlestonSoftwareAssociates Sono felice di sentire che eri ben preparato! Per proteggermi ulteriormente da problemi come questo, anch'io non permetto più che i file rimangano nelle loro directory predefinite; quei file Web che sono stati esposti pochi giorni fa in ~/httpdocs/ ora risiedono in ~/sites/example.com/www/. La prossima volta che qualcosa viene ripristinato alle impostazioni predefinite, i domini restituiranno errori 500, piuttosto che servire i miei file PHP così come sono.

Aaron Adams Aaron Adams
7 dic 2012 05:20:59

@AaronAdams - questa è una buona idea, ma nel mio caso non avrebbe aiutato. Hanno ripristinato ABBASTANZA della configurazione per puntarla alla mia root document non predefinita, ma non abbastanza per farla funzionare correttamente. Davvero lo scenario peggiore possibile. In effetti ALCUNE parti del sito funzionavano dopo il secondo tentativo di riparazione, ma comunque non era ancora corretto. Una situazione veramente orribile a causa di una riparazione del server mal gestita dalla mia compagnia di hosting, che sento sottolineare il tuo punto. Più puoi fare per proteggere i dati sensibili anche per quegli eventi "una volta su un milione", meglio è.

Lance Cleveland Lance Cleveland
10 dic 2012 17:32:36

Posso scrivere ../../wp-config.php o anche un nome diverso? Ho appena provato su un sistema automator con la costante config posizionata un livello sopra. Ho creato quel blog in una sottocartella e volevo mettere wp-config.php due livelli sopra, ma il sito non funzionava usando ../../ mentre ..// funziona quando WP non è in una sottocartella.

Kangarooo Kangarooo
8 mar 2017 03:21:33

Risposta molto chiara con una conclusione altrettanto chiara. Pratico questa e altre misure di sicurezza da anni e non ho avuto incidenti di sicurezza su tre istanze WordPress ospitate separatamente. Penso che la mera ipotesi che qualcosa non sia efficace da solo come lo è in combinazione con altre misure. Eppure le persone continuano a perpetuare questo consiglio scomodo di far ascoltare SSH su porte non privilegiate ("alte") per un falso senso di sicurezza, ad esempio. O consideriamo la sicurezza il risultato di una combinazione di misure mirate, o la lasciamo perdere del tutto.

0xC0000022L 0xC0000022L
12 lug 2020 13:59:50

Ho sbagliato qualche configurazione su nginx e ha iniziato a scaricare file contenenti ogni informazione sensibile. Quindi è definitivamente meglio mettere wp-conf su una directory sopra. Il famoso framework PHP "Laravel" utilizza lo stesso approccio per default.

Abdul Rehman Abdul Rehman
26 mar 2021 05:55:07

Piccola domanda sul codice php: è utile omettere ?> in questo caso particolare? O è solo una preferenza personale?

John John
5 mar 2024 17:15:03
Mostra i restanti 11 commenti
12
44

La cosa più importante è che il file wp-config.php contiene informazioni sensibili: nome utente e password del database, ecc.

Quindi l'idea è: spostarlo al di fuori della root del documento e non dovrai preoccuparti di nulla. Un attaccante non potrà mai accedere a quel file da una fonte esterna.

Tuttavia, c'è un problema: wp-config.php in realtà non stampa mai nulla sullo schermo. Definisce solo varie costanti utilizzate in tutta l'installazione di WordPress. Pertanto, l'unico modo in cui qualcuno potrà vedere il contenuto di quel file è se aggira l'interprete PHP del tuo server – facendo in modo che un file .php venga visualizzato come testo semplice. Se ciò accade, sei già nei guai: hanno accesso diretto al tuo server (e probabilmente permessi root) e possono fare ciò che vogliono.

Dirò subito che non c'è alcun vantaggio nello spostare wp-config al di fuori della root del documento da un punto di vista della sicurezza – per i motivi sopra citati e questi:

  1. Puoi limitare l'accesso al file tramite la configurazione del tuo virtual host o .htaccess – limitando efficacemente l'accesso esterno al file nello stesso modo in cui lo farebbe spostandolo al di fuori della root del documento
  2. Puoi assicurarti che i permessi del file siano rigorosi su wp-config per impedire a qualsiasi utente senza privilegi sufficienti di leggere il file, anche se ottiene accesso (limitato) al tuo server via SSH.
  3. Le tue informazioni sensibili, come le impostazioni del database, vengono utilizzate solo su un singolo sito. Quindi, anche se un attaccante avesse accesso a tali informazioni, l'unico sito interessato sarebbe l'installazione di WordPress a cui appartiene il file wp-config.php. Ancora più importante, quell'utente del database ha solo i permessi per leggere e scrivere nel database di quell'installazione di WordPress e nient'altro – nessun accesso per concedere permessi ad altri utenti. In altre parole, se un attaccante ottiene accesso al tuo database, è semplicemente una questione di ripristinare da un backup (vedi punto 4) e cambiare l'utente del database
  4. Esegui backup frequentemente. "Frequentemente" è un termine relativo: se pubblichi 20 articoli al giorno, è meglio eseguire un backup ogni giorno o ogni pochi giorni. Se pubblichi una volta a settimana, un backup settimanale è probabilmente sufficiente.
  5. Hai il tuo sito sotto controllo delle versioni (come questo), il che significa che anche se un attaccante ottenesse l'accesso, potresti facilmente rilevare le modifiche al codice e ripristinarle. Se un attaccante ha accesso a wp-config, probabilmente ha manomesso qualcos'altro.
  6. Le informazioni del database sono davvero le uniche cose sensibili in wp-config, e poiché sei attento a questo (vedi punto 3 e 4), non è un grosso problema. I salt e simili possono essere cambiati in qualsiasi momento. L'unica cosa che accade è che invalida i cookie degli utenti loggati.

Per me, spostare wp-config al di fuori della root del documento puzza di sicurezza per oscurità – che è molto un argomento fantoccio.

18 lug 2012 03:17:03
Commenti

Sì, è più o meno quello che pensavo. Sono contento di sapere di non essere l'unico :) Vorrei lasciare la domanda aperta per un altro giorno o due nel caso qualcuno abbia un contro-argomento convincente, ma finora questa mi sembra la risposta corretta.

Ian Dunn Ian Dunn
18 lug 2012 04:56:05

Piccola correzione: non c'è alcun vantaggio in termini di sicurezza nello spostare il file wp-config.php fuori dalla root del documento. Ci sono altri vantaggi, che non sono legati alla sicurezza, e che si applicano solo a configurazioni insolite.

Otto Otto
12 ago 2012 18:19:02

Ottimo punto. Modificato.

chrisguitarguy chrisguitarguy
12 ago 2012 19:36:42

Solo per sfatare un possibile mito - non è possibile che qualcosa vada storto lato server - nel qual caso il codice php viene stampato sullo schermo?

Stephen Harris Stephen Harris
12 ago 2012 21:49:17

Certo. Se mod_php non funzionasse o i file PHP non venissero passati all'interprete PHP, è possibile. Se stai utilizzando una configurazione FCGI, la stessa cosa è possibile se i file PHP non vengono passati al processo fcgi per l'interpretazione. Entrambi i casi indicano problemi piuttosto gravi che però è improbabile si verifichino.

chrisguitarguy chrisguitarguy
12 ago 2012 22:17:30

Penso che la domanda fondamentale qui non sia se ci sia qualche vantaggio nello spostarlo, ma se tali vantaggi superino il rischio di espandere l'ambito di openbase_dir per includere la directory padre, che spesso contiene file di log, backup, una directory di archiviazione file privati, ecc. Continuo a chiedere questo, e nessuno dei sostenitori dello spostamento di wp-config mi ha mai dato una risposta. Quindi, a questo punto, interpreto il loro silenzio come un segnale che i vantaggi non valgono il rischio.

Ian Dunn Ian Dunn
13 set 2012 10:25:06

@IanDunn Ma le risposte migliori suggeriscono di spostarlo completamente da quella gerarchia in una separata, il che affronta effettivamente la tua preoccupazione riguardo i log ecc. Questa risposta non risponde alla tua domanda dal titolo "spostare... è davvero benefico", dice solo che altre misure di sicurezza sono utili e cerca di rassicurarti sul non preoccuparti della sicurezza. Tutti pensano che la propria casa sia sicura finché non vengono svaligiati. Dopo di che fanno un lavoro migliore. Alcune persone non vengono mai svaligiate, anche se la loro sicurezza è bassa, ma questo non significa che sia un buon consiglio avere una sicurezza inferiore.

AndrewC AndrewC
5 dic 2012 02:56:40

A quanto ne so, non è possibile spostarlo in nessun posto tranne una directory sopra ABSPATH, perché è l'unica posizione dove WP lo cercherà.

Ian Dunn Ian Dunn
6 dic 2012 01:57:24

Non importa, Aaron ha aggiornato la sua risposta con una soluzione alternativa per questo, utilizzando un file wp-config.php fittizio per includere() quello reale.

Ian Dunn Ian Dunn
6 dic 2012 18:58:11

Questi sono punti validi, ma il mio problema principale è che si tratta di argomenti rimediali, non preventivi. La maggior parte di questi discorsi spiega come non sia un grosso problema perché A) si presuppone che qualcuno abbia gestito correttamente l'utente del database e B) si dispone di backup. Cosa succede quando si utilizza qualcosa come WooCommerce o si memorizzano informazioni sensibili nel database? Allora si è nei guai.

Goldentoa11 Goldentoa11
16 giu 2014 21:50:35

Ho sbagliato qualche configurazione su nginx e ha iniziato a scaricare file contenenti ogni tipo di informazione sensibile. Quindi è decisamente meglio mettere wp-conf nella directory superiore. Anche il famoso framework PHP "Laravel" utilizza lo stesso approccio per impostazione predefinita.

Abdul Rehman Abdul Rehman
26 mar 2021 05:55:34

Che approccio ignorante sulla sicurezza. Come se non ci fosse differenza di portata tra (accidentalmente) configurare male PHP e perdere le credenziali del server del database e i salt per gli hash delle password contenute al suo interno. Sebbene il punto di rottura finale delle misure di sicurezza sia binario, la loro implementazione non lo è. Seguendo la tua logica, potresti rimuovere qualsiasi componente, ad esempio SELinux/AppArmor, senza influire sulla sicurezza complessiva del sistema. Dovrebbe essere ovvio quanto sia sbagliato. Tipicamente, le misure di sicurezza preventive cercano di proteggere anche da casi improbabili.

0xC0000022L 0xC0000022L
18 ago 2021 11:09:19
Mostra i restanti 7 commenti
7
26

Penso che la risposta di Max sia molto competente, e questa è una parte della questione. Il WordPress Codex fornisce ulteriori consigli:

Inoltre, assicurati che solo tu (e il server web) possa leggere questo file (generalmente significa un permesso 400 o 440).

Se utilizzi un server con .htaccess, puoi inserire questo nel file (all'inizio) per negare l'accesso a chiunque cerchi di accedervi:

<files wp-config.php>
order allow,deny
deny from all
</files>

Nota che impostare i permessi 400 o 440 su wp-config.php potrebbe impedire ai plugin di scrivere o modificarlo. Un caso reale potrebbe essere, ad esempio, quello dei plugin di caching (W3 Total Cache, WP Super Cache, ecc.). In quel caso, opterei per i permessi 600 (il valore predefinito per i file nella directory /home/user).

13 lug 2012 19:13:49
Commenti

Max ha la risposta. +1 per lui. Sto solo cercando di estenderla.

its_me its_me
13 lug 2012 19:15:39

Aahan Krish, hai centrato il bersaglio. Grazie per l'aggiunta.

Max Yudin Max Yudin
13 lug 2012 19:26:34

Quindi, se usi htaccess per negare le richieste HTTP a wp-config.php, non ottieni lo stesso risultato che spostandolo fuori dalla root del documento, ma senza esporre log/backup/ecc.?

Ian Dunn Ian Dunn
13 lug 2012 20:59:10

@IanDunn Dipende da quale sia la document root— (1) Se WordPress è ospitato in una directory all'interno di public_html, spostare wp-config.php al di fuori della directory significa che si troverà nella directory public_html. In questo caso, dovrai utilizzare le regole htaccess per negare le richieste HTTP a wp-config.php. (2) Se WordPress è installato direttamente sotto la directory public_html, un livello sopra => sposterai il file nella directory /home/user. In questo caso sei abbastanza al sicuro poiché il file è al di fuori della document root. Puoi comunque impostare i permessi del file a 600 (o anche più restrittivi come 440 o 400).

its_me its_me
13 lug 2012 21:10:23

@IanDunn Come ho detto, questa è la mia comprensione di base, e non sono un esperto di sicurezza. :)

its_me its_me
13 lug 2012 21:10:58

Nel caso #1 non ottieni il beneficio di sicurezza desiderato. Il punto principale è spostarlo al di fuori della document root, non solo di un livello.

Ian Dunn Ian Dunn
14 lug 2012 03:11:58

Nel caso #2, dovresti espandere l'ambito di open_basedir per consentire a PHP di accedere a tutto in /home/user, il che mi sembra un grosso problema. Tutto ciò che è memorizzato lì (log, backup, .bash_history, ecc.) sarebbe accessibile a qualsiasi script PHP infetto in esecuzione in /home/user/public_html. Sembrerebbe meglio lasciare wp-config in /home/user/public_html/wp-config.php e usare regole htaccess per bloccare le richieste HTTP ad esso. Ottieni comunque il vantaggio di bloccare l'accesso nel caso (improbabile) che venga visualizzato in testo semplice, ma non esponi i file sopra public_html.

Ian Dunn Ian Dunn
14 lug 2012 03:12:56
Mostra i restanti 2 commenti
3
18

Qualcuno ci ha chiesto di intervenire, e risponderò qui.

Sì, ci sono vantaggi di sicurezza nell'isolare il tuo wp-config.php dalla directory root del tuo sito.

1- Se il tuo gestore PHP viene danneggiato o modificato in qualche modo, le informazioni del tuo database non saranno esposte. E sì, ho visto questo accadere alcune volte su host condivisi durante gli aggiornamenti del server. Sì, il sito sarà guasto durante quel periodo, ma le tue password rimarranno intatte.

2- Le migliori pratiche raccomandano sempre di isolare i file di configurazione dai file di dati. Sì, è difficile farlo con WordPress (o qualsiasi applicazione web), ma spostarlo verso l'alto fa un po' di isolamento.

3- Ricorda la vulnerabilità PHP-CGI, dove chiunque poteva passare ?-s a un file e visualizzare il sorgente. http://www.kb.cert.org/vuls/id/520827

Alla fine, questi sono piccoli dettagli, ma aiutano a minimizzare il rischio. Specialmente se sei in un ambiente condiviso, dove chiunque può accedere al tuo database (tutto ciò di cui hanno bisogno è un utente/password).

Ma non lasciare che piccole distrazioni (ottimizzazioni premature) si mettano davanti a ciò che è veramente necessario per ottenere un sito adeguatamente sicuro:

1- Tienilo sempre aggiornato

2- Usa password complesse

3- Limita l'accesso (tramite permessi). Abbiamo un post al riguardo qui:

http://blog.sucuri.net/2012/08/wordpress-security-cutting-through-the-bs.html

grazie,

12 set 2012 15:41:08
Commenti

Ragazzi, grazie per aver condiviso le vostre opinioni. Penso che abbiamo già toccato la maggior parte di questi punti nelle altre risposte e nei relativi commenti. 1) Sì, è possibile, ma raro; 2) Sì, ci sono vantaggi, ma sono minimi; 3) Sì, è possibile, ma quel tipo di vulnerabilità è improbabile che si ripeta, e proteggersi da essa è un po' come giocare a "whac-a-mole", o far togliere le scarpe alle persone in aeroporto perché qualche idiota ha nascosto una bomba nella scarpa una volta. È una reazione eccessiva ed è improbabile che porti benefici futuri.

Ian Dunn Ian Dunn
12 set 2012 18:01:18

Nelle varie discussioni, la domanda è stata affinata da "Ci sono dei vantaggi?" a "Ok, ci sono alcuni vantaggi, ma superano i rischi?" Il rischio principale a cui mi riferisco è il fatto che devi espandere l'ambito di openbase_dir per consentire a PHP di accedere agli script al di fuori della root web. Molte configurazioni di hosting - comprese quelle che utilizzano Plesk, che sono molte - memorizzano log, backup, aree FTP private che dovrebbero essere isolate dalla root web, ecc. nella directory sopra la root web. Quindi, concedere a PHP l'accesso a quella directory può rappresentare una grave vulnerabilità.

Ian Dunn Ian Dunn
12 set 2012 18:04:58

@IanDunn da quando la rarità di un evento è un argomento valido contro l'adozione di una misura di sicurezza preventiva che affronta un evento così improbabile? Il tuo punto su dove PHP può aprire file può oggi essere affrontato tramite l'hardening di systemd, tra l'altro. Il punto centrale della sicurezza informatica è che gli aggressori hanno a disposizione infinite vie di intrusione, mentre i difensori possono solo difendersi da vettori di attacco noti. Quindi è consuetudine combinare quante più misure preventive possibili per fornire una rete di sicurezza, piuttosto che affidarsi a un singolo nodo.

0xC0000022L 0xC0000022L
18 ago 2021 11:21:23
7
16

Assolutamente SÌ.

Quando sposti wp-config.php al di fuori della directory pubblica, lo proteggi dalla lettura tramite browser nel caso in cui il gestore PHP venga modificato in modo malevolo (o accidentalmente!).

La lettura delle credenziali del tuo database è possibile quando il server è gravemente compromesso a causa di un amministratore negligente. Fategli pagare una multa e cercate un servizio di hosting più curato e affidabile. Anche se potrebbe costare di più.

13 lug 2012 19:07:26
Commenti

Se un attaccante ha accesso sufficiente per modificare il gestore PHP, sei già nei guai. Nella mia esperienza, i cambiamenti accidentali sono molto rari, e in quel caso sarebbe facile cambiare la password. Alla luce di queste considerazioni, pensi ancora che valga la pena rischiare di esporre log/backup/ecc. a causa dell'ambito ampliato di open_basedir?

Ian Dunn Ian Dunn
13 lug 2012 21:01:21

Non ho mai avuto accesso -rwx alle directory superiori a public_html, quindi non ho mai avuto familiarità con open_basedir. I miei log si trovano in una directory separata, così come i backup. Penso che sia così su tutti gli hosting condivisi.

Max Yudin Max Yudin
13 lug 2012 21:35:40

Gli host variano moltissimo; non esiste una struttura di directory standard. Plesk (uno dei pannelli di controllo più popolari per gli hosting condivisi) posiziona i log in /var/www/vhosts/example.com/statistics/logs e la root del documento è /var/www/vhosts/example.com/httpdocs. Spostare wp-config.php in /var/www/vhosts/example.com/wp-config.php richiederebbe di dare agli script l'accesso all'intera directory example.com.

Ian Dunn Ian Dunn
14 lug 2012 03:03:12

Solo per curiosità, dove sono memorizzati i tuoi log e backup, se non nella directory del dominio? Vi si accede tramite un pannello di controllo o qualcosa del genere?

Ian Dunn Ian Dunn
14 lug 2012 03:04:10

Sì, tramite un pannello di controllo.

Max Yudin Max Yudin
14 lug 2012 10:37:56

Potrei sbagliarmi su questo, ma se il tuo server non è sicuro, un attacco tramite symlink potrebbe leggere il tuo wp-config.php indipendentemente da dove si trova. Tutto ciò che un attaccante deve sapere è dove potrebbe trovarsi il file e se il symlinking è possibile. Forse è una domanda fuori tema, ma sembrerebbe che se ci fosse un modo per rinominare il wp-config.php, sarebbe un modo per prevenire il phishing per trovarlo.

MickeyRoush MickeyRoush
14 lug 2012 13:48:18

Il nome del file wp-config.php è hardcoded nel file wp-load.php, quindi modificarlo non è possibile senza alterare il core.

Ian Dunn Ian Dunn
16 lug 2012 19:45:24
Mostra i restanti 2 commenti
6

Vorrei solo chiarire, per amor di discussione, che spostare il file wp_config.php non significa necessariamente doverlo spostare solo nella directory genitore. Supponiamo che tu abbia una struttura come /root/html, dove html contiene l'installazione di WP e tutto il tuo contenuto HTML. Invece di spostare wp_config.php in /root, potresti spostarlo in qualcosa come /root/secure ... che è sia al di fuori della directory html sia non nella directory root del server. Naturalmente, dovresti assicurarti che php possa essere eseguito anche in questa cartella secure.

Poiché WP non può essere configurato per cercare wp_config.php in una cartella di pari livello come /root/secure, devi fare un passo aggiuntivo. Ho lasciato il wp_config.php in /root/html, e ho rimosso le parti sensibili (credenziali del database, salt, prefisso delle tabelle) e le ho spostate in un file separato chiamato config.php. Poi aggiungi il comando PHP include al tuo wp_config.php, in questo modo: include('/home/content/path/to/root/secure/config.php');

Questo è essenzialmente ciò che ho fatto nella mia configurazione. Ora, basandomi sulla discussione di cui sopra, sto ancora valutando se sia necessario o addirittura una buona idea. Ma volevo solo aggiungere che la configurazione sopra descritta è possibile. Non espone i tuoi backup e altri file root, e fintanto che la cartella secure non è configurata con il suo URL pubblico, non è navigabile.

Inoltre, puoi limitare l'accesso alla cartella secure creando un file .htaccess all'interno con:

order deny,allow
deny from all
allow from 127.0.0.1
3 ott 2012 16:44:03
Commenti

Ciao Michael, grazie per aver condiviso questo. Hai provato a testarlo in un ambiente reale per verificare che funzioni? Penso che la direttiva open_basedir accetti un intero albero, quindi per accedere a /root/secure da /root/html, dovresti impostare open_basedir su /root.

Ian Dunn Ian Dunn
3 ott 2012 17:52:20

Per far funzionare la tua idea, penso che dovresti configurare la struttura delle directory come /root/httpdocs/config/accessible, dove httpdocs contiene log, backup, ecc.; config contiene wp-config.php, e accessible contiene WordPress e tutto il contenuto. Dovresti modificare la configurazione del vhost, ecc. per rimappare la root del documento su accessible. Tuttavia, non vedo alcun vantaggio rispetto al semplice negare le richieste HTTP a wp-config nella configurazione predefinita.

Ian Dunn Ian Dunn
3 ott 2012 17:53:41

Secondo http://www.php.net/manual/en/ini.core.php#ini.open-basedir: "Su Windows, separa le directory con un punto e virgola. Su tutti gli altri sistemi, separa le directory con i due punti. Come modulo Apache, i percorsi open_basedir dalle directory padre vengono ora ereditati automaticamente." Quindi puoi impostare più directory, non è necessario che siano in un singolo albero.

Michael Michael
3 ott 2012 22:34:38

Ho appena testato e sembra che tu abbia ragione. Tuttavia, non sono ancora sicuro di quale vantaggio in termini di sicurezza questo abbia rispetto al semplice negare l'accesso al file tramite Apache.

Ian Dunn Ian Dunn
4 ott 2012 01:05:53

@IanDunn ha risposto bene nella risposta di Aaron Adams

AndrewC AndrewC
5 dic 2012 03:02:10

Non trovo il suo argomento convincente. Ho spiegato il perché nel mio commento alla sua risposta.

Ian Dunn Ian Dunn
6 dic 2012 01:55:13
Mostra i restanti 1 commenti
7

Ci sono molti temi e plugin scritti male là fuori che consentono agli aggressori di iniettare codice (ricordate il problema di sicurezza con Timthumb). Se fossi un aggressore, perché dovrei cercare il wp-config.php? Basta iniettare questo codice:

var_dump( DB_NAME, DB_USER, DB_PASSWORD );

Puoi provare a nascondere il tuo wp-config.php. Fintanto che WordPress rende tutte le informazioni sensibili accessibili globalmente, nascondere il wp-config.php non ha alcun beneficio.

La parte negativa di wp-config.php non è che contiene dati sensibili. La parte negativa è definire i dati sensibili come costanti accessibili globalmente.

Aggiornamento

Voglio chiarire i problemi con define() e perché è una cattiva idea definire dati sensibili come costanti globali.

Ci sono molti modi per attaccare un sito web. L'iniezione di script è solo uno dei metodi per attaccare un sito web.

Supponendo che il server abbia una vulnerabilità che consente a un aggressore di accedere a un dump della memoria. L'aggressore troverà nel dump della memoria tutti i valori di tutte le variabili. Se definisci una costante accessibile globalmente, deve rimanere in memoria fino alla fine dello script. Creando una variabile invece di una costante, c'è una buona probabilità che il garbage collector sovrascriva (o liberi) la memoria dopo che la variabile non è più necessaria.

Un modo migliore per proteggere i dati sensibili è eliminarli immediatamente dopo l'uso:

$db_con = new stdClass();
$db_con->db_user = 'username';
$db_con->password = 'password';
$db_con->host = 'localhost';

$db_handler = new Database_Handler( $db_con );

$db_con = null;

Dopo aver utilizzato i dati sensibili, l'assegnazione a null sovrascriverà i dati in memoria. Un aggressore deve ottenere il dump della memoria proprio nel momento in cui $db_con contiene i dati sensibili. E quello è un tempo molto breve nell'esempio sopra (se la classe Database_Handler non ne salva una copia).

19 nov 2012 22:57:05
Commenti

Questa risposta non affronta direttamente la domanda. Qualsiasi autore di plugin può divertirsi con WordPress se riesce a convincerti a installare il suo codice con intenti malevoli. Non è diverso dall'installare volontariamente un virus sul tuo sistema. Questo argomento per non spostare wp-config.php è inutile. È come dire che installare volontariamente una bomba nell'auto rende inutile l'allarme. Tecnicamente vero, ma WTF?!?

Lance Cleveland Lance Cleveland
6 dic 2012 07:51:56

No, non è inutile. La domanda è: Posso proteggere l'account del database nascondendo wp-config.php? E la risposta è chiaramente: No. È come chiedere "Posso proteggere la mia auto dalle bombe con un allarme?" Non c'è altro vantaggio nel nascondere wp-config in termini di protezione dell'accesso al database o FTP. Entrambi sono nell'ambito globale. Sono sicuro che ci sono molti altri modi per gli attaccanti di accedere alle variabili globali senza iniettare codice.

Ralf912 Ralf912
6 dic 2012 09:51:28

Non vedo "posso proteggere l'account del database nascondendo wp-config.php" nella domanda originale. La domanda originale era "ha senso spostare wp-config.php?". La risposta è assolutamente sì, IMO. È come chiedere se dovresti chiudere a chiave la porta di casa quando esci. Dire "qualcuno può facilmente rompere una finestra e entrare comunque, quindi perché preoccuparsi" non risponde al punto fondamentale della domanda. IMO la domanda era questa: "Vale la pena lo sforzo extra per spostare wp-config.php? C'è QUALSIASI vantaggio nel farlo?". Sì. Almeno tiene lontani gli hacker pigri.

Lance Cleveland Lance Cleveland
10 dic 2012 17:28:25

Una delle migliori pratiche di sicurezza più comuni... Hai trascurato un punto molto (molto, molto) importante: a cosa è interessato un attaccante? E non è come hai stilizzato il tuo wp-config.php. Un attaccante è interessato ai valori che hai definito nel wp-config. Prendendo il tuo esempio con la porta d'ingresso: Nascondere il tuo wp-config è come se chiudessi a chiave la porta di casa, ma lasciassi tutto il tuo oro incustodito in giardino. Tutti i valori definiti nel wp-config sono definiti globalmente. Quindi sono tutti accessibili al di fuori del wp-config. Anche se nascondi il wp-config, i valori sono comunque presenti.

Ralf912 Ralf912
11 dic 2012 13:21:45

Penso che coloro che sostengono di spostarlo stiano cercando di proteggersi da scenari in cui wp-config.php potrebbe essere visualizzato in testo semplice tramite una richiesta HTTP, piuttosto che da scenari in cui potrebbe essere esposto ad altro codice PHP in esecuzione sull'host.

Ian Dunn Ian Dunn
12 dic 2012 00:40:19

@Ralf912 - non è esattamente corretto. Le define globali sono ACCESSIBILI da tutti i file di programma in tutte le directory ma non vengono visualizzate. Per VEDERE i valori dovresti essere in grado di scrivere codice modificato sul server. Mentre un server mal configurato con wp-config.php nella root del documento mostrerà prontamente quei valori come testo semplice. Questo è il punto fondamentale. Vedere il codice di qualsiasi plugin/tema non causa alcun danno.

Lance Cleveland Lance Cleveland
12 dic 2012 02:33:01

Ottimo punto su come define globalizza qualsiasi cosa venga definita.

Goldentoa11 Goldentoa11
16 giu 2014 21:53:39
Mostra i restanti 2 commenti
1

Mi scuso per riportare in auge un vecchio post, ma non esiste una soluzione ovvia a tutto questo? Sappiamo che ci sono alcuni benefici per la sicurezza nel spostare il file wp-config.php fuori dalla directory principale di WordPress. Alcuni sostengono che i vantaggi siano minimi, altri no.

D'altra parte, ci possono essere alcuni svantaggi nello spostare il file dalla sua posizione predefinita, come il malfunzionamento di alcuni plugin che non hanno la funzionalità di cercare il file wp-config.php in altre posizioni.

La cosa più ovvia per me è creare un file secret-info.php al di fuori della directory principale di WordPress che contenga le variabili per tutti i tuoi username e password, ad esempio:

$userName = "user";

$databasePassword = "12345";

Lascia il file wp-config.php nella directory predefinita di WordPress, rimuovi i valori di username e password da wp-config.php ma lascia tutto il resto. Poi semplicemente fai riferimento alle variabili $userName e $databasePassword richiedendo secret-info.php in wp-config.php, ad esempio:

require('PERCORSO-DEL-FILE/secret-info.php');

Sembra la cosa più ovvia da fare, mi sto perdendo qualcosa?

21 lug 2020 20:49:08
Commenti

È in realtà una cosa molto positiva aggiungere una risposta a una vecchia domanda, c'è persino un badge per questo. WPSE è pensato per essere un repository di conoscenza, piuttosto che un forum.

Ian Dunn Ian Dunn
22 lug 2020 07:36:24
0
-1

Anni dopo e WordPress continua a posizionare wp-config.php per impostazione predefinita nella sua directory root accessibile dal web senza nemmeno aggiungere regole .htaccess per impedirne l'accesso. La maggior parte degli hosting condivisi che offrono un'installazione one-click di WordPress probabilmente fanno lo stesso. Il risultato è che la maggior parte dei siti WordPress è configurata così e non credo di aver mai sentito qualcuno dire "il mio sito è stato violato perché wp-config.php era nella directory root".

Per utilizzare le informazioni contenute nel file, è necessario l'accesso al server del database, probabilmente aggiungendo script a un server applicativo. Se si utilizza un VPS, significa che se un attaccante ha questa capacità, è "game over" in ogni caso. Negli hosting condivisi, invece, l'accesso al database viene solitamente isolato in base all'utente, quindi non è una cosa banale da fare nemmeno in quel contesto.

Il risultato è che le informazioni sullo stato di salute di WordPress 5.2+ non suggeriranno di spostare il file, e non ho mai sentito di un plugin di sicurezza che lo faccia.

Quindi, un'informazione pratica di lungo termine dimostra che teoricamente sarebbe meglio farlo, ma è per lo più un teatro della sicurezza.

Il vero problema nello spostare wp-config.php una directory sopra è che essenzialmente impedisce l'installazione di altri WordPress nella stessa directory del primo, cosa che molte persone fanno. La soluzione è mantenere wp-config.php nella posizione predefinita, ma aggiungere del codice che carica la configurazione effettiva da un file diverso, situato al di fuori della root web e probabilmente nominato in modo non generico ma specifico per il sito.

Il problema con questo approccio è che molti tutorial WordPress non menzionano nemmeno la possibilità di avere wp-config.php in un'altra posizione, e le persone che verranno dopo di te avranno un momento di "WTF" cercando di capire come seguire le istruzioni che chiedono di aggiungere un define al file wp-config.php.

10 ago 2021 09:26:11
1
-2

Oltre ai vantaggi in termini di sicurezza, ti consente anche di mantenere la tua istanza di WordPress sotto controllo delle versioni, mantenendo i file core di WordPress come un submodule/esterno. È così che Mark Jaquith ha configurato il suo progetto WordPress-Skeleton. Consulta https://github.com/markjaquith/WordPress-Skeleton#assumptions per i dettagli.

18 lug 2012 00:18:38
Commenti

Lo ha configurato nella root del documento, non al di fuori di essa, quindi non è rilevante per questa domanda. La tecnica di cui si chiedeva nella domanda specifica di spostare wp-config.php una directory sopra la root del documento del vhost, non solo una directory sopra la cartella di installazione di WordPress. L'intero punto è di posizionarlo al di fuori della cartella che può essere letta dalle richieste HTTP.

Ian Dunn Ian Dunn
18 lug 2012 01:59:08