Come oscuro la mia installazione di Wordpress tramite htaccess?


9

(Sono consapevole che la sicurezza tramite l'oscurità non è consigliata).

Sto cercando di nascondere il fatto che sto usando Wordpress. Questo post è utile, ma riguarda solo il contenuto (una specie di). Sono interessato a che si verifichi quanto segue:

  1. L'utente tenta di accedere a qualsiasi URL con wp*una sottostringa tramite il proprio browser.

    Risultato: reindirizzato alla pagina 404.

  2. L'utente / amministratore del blog sa per poter accedere al sito http://example.com/blogin/.

    Risultato: apache li reindirizza ahttp://example.com/wp-admin/.

  3. Se un utente tenta di accedere direttamente wp-admindal proprio browser, viene inviato al numero 1.

    Risultato: reindirizzato alla pagina 404.

Cose che ho fatto finora

  1. Ho notato per un'installazione predefinita di WordPress che potevo accedere a qualsiasi wp*file nella directory (relativa) root dell'installazione WP. In particolare è wp-settings.phpstato problematico perché ha dato informazioni sul mio set-up. Se un utente vi accedesse, emetterebbe alcuni errori PHP e rivelerebbe parte della struttura della directory. Ho modificato il mio file php.ini per display_errorsdisattivarlo. Ora l'accesso http://example.com/wp-settngs.phpfa apparire una pagina vuota.

  2. Questo di per sé non è l'ideale perché rivela che wp-settings.phpesiste. In effetti, wp*è possibile accedere a tutti i diversi file (con risultati diversi). Ho quindi inserito quanto segue nel mio file htaccess:

          RewriteEngine On
          RewriteBase /
          RewriteCond %{PATH_INFO} wp* [NC]
          RewriteRule .* - [F]
    

    Questo ha funzionato alla grande! Qualsiasi cosa con a è wp*stata instradata alla mia pagina 404 personalizzata. Ma ora non riesco ad accedere alla mia pagina di amministrazione.

  3. Ho cercato di inserire questa riga nel codice sopra: RewriteRule ^blogin wp-admin [NC,R,L]. Avrebbe dovuto essere subito dopo, RewriteBasema non ha funzionato.

  4. Ho provato a fare un:

    <Directory /home/example/wp*> 
     Order Allow, Deny 
     Allow from example.com 
     Deny from all 
    </Directory> 
    

    sperando che un referer dal mio sito (tramite la riscrittura della regola) sarebbe in grado di accedere a wp-admin, ma non a qualcuno dall'esterno. Neanche questo ha funzionato. apache si è lamentato del fatto che non è possibile utilizzare questa direttiva da htaccess.

Ho letto la documentazione di Apache; Comprendo i concetti, teoricamente, ma ho bisogno di un aiuto pratico.

EDIT: Sto cercando una soluzione che utilizza .htaccess invece di httpd.conf poiché la mia configurazione specifica rende l'utilizzo di httpd.conf incoerente.


Hai provato a rinominare tutti i file wp * con un prefisso diverso e a modificare tutti i riferimenti a tali file? Penso che questa sarà la cosa più semplice da fare. Certo, puoi andare con la riscrittura degli URL, ma poi dovrai assicurarti che tutti i collegamenti non utilizzino anche i nomi di wp *, che (a mio avviso) è abbastanza simile al suggerimento originale.
LazyOne,

Penso che uno dei vantaggi della riscrittura degli URL sia che le risorse richieste possono essere rimappate a un altro prefisso ... Spero di poterlo fare senza rinominare tutti i file (che è il punto di passare attraverso questo) ...
Avery Chan,

Risposte:


8

TLDR; Non è possibile oscurare WordPress usando solo le direttive nel tuo file .htaccess.

Ora arriva una storia di guai e orrore. Il nostro amico, fbh, aveva ragione sulla difficoltà di nascondere WordPress, non per i codardi dal ventre giallo. Arr! Ecco i dettagli di questa (mis) avventura. Siete avvisati!

Motivazione

Sono uno di quei ragazzi a cui piacciono le cose perfette. Io spendo perdere tempo over-engineering qualcosa per essere il 'modo giusto'. Una delle cose che non mi è piaciuta della configurazione predefinita di WordPress era che un utente poteva digitare http://ex.com/wp-settings.php e quindi tutto questo gergo php sarebbe sparso dappertutto. Alla fine sono stato in grado di disattivare gli errori tramite PHP, ma ciò ha portato a un desiderio maggiore di avere solo cose che sono diventate risorse localizzabili dal server ... e che tutto il resto sarebbe 404 / 3'identificato nella nostra pagina di ricerca personalizzata. Dopodiché mi è venuta l'idea che mi piacerebbe nascondere completamente il framework sottostante (cioè WP) ... comunque ... se vuoi nascondere WP è possibile. Ma è davvero difficile.

Passi per il tuo destino

  1. Modifica le impostazioni ini di PHP in modo appropriato. (ovvero disattiva gli errori di visualizzazione) Potresti pensare che ciò non sia necessario perché se stiamo usando .htaccess per reindirizzare le cose, la gente non vedrà errori perché non possono accedere all'errore che causa risorse (ti sto guardando wp-settings.php). Ma potrebbero verificarsi errori nelle pagine visualizzate, quindi è assolutamente necessario disattivarle. Solo perché le WP_*direttive sono stabilite non significa necessariamente che le cose funzioneranno come pensi che possano fare. Ho scoperto che sul mio server ho dovuto impostare display_errors su false FIRST, perché WP_DISPLAY_ERRORS ha presupposto che l'impostazione predefinita fosse false.

    Il controllo delle impostazioni ini di PHP può essere semplice come inserire una direttiva nel tuo file .htaccess. O, nel mio caso, complicato come creare un gestore CGI e inserire un file php.ini lì. YMMV a seconda della configurazione.

  2. Rimuovere tutti gli accessi a file / directory con wp-prefisso. L'idea è che la tua distribuzione WP riguardi i tuoi contenuti, non WP (a meno che non sia specificamente focalizzato su WP). Non ha senso per le persone voler vedere cosa ha http: // ex.com/wp-cron.php ... a meno che non stiano andando male. Ho realizzato questo tramite questo:

     # If the resource requested is a `wp-*` file or directory, poop to a 403. 
     RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC] 
     RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
     RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
     RewriteCond %{REQUEST_FILENAME} -d [NC] 
     RewriteRule .* - [F,L] 
    
  3. Scopri come passare attraverso mordor La rimozione di tutti gli accessi non wp-*ti consente più di accedere alla parte amministrativa di WP. Questo fa davvero schifo. Oltre a questo aspetto negativo, ti sei appena reso conto che non sai cosa RewriteCond %{ENV:REDIRECT_STATUS} ^$fa davvero. Bene, quello che ho cercato di fare è di darmi una backdoor "segreta" alla pagina di amministrazione di WP. Ho usato questo codice:

     # If the resource requested is 'mordor' (with or without an ending
     # slash) do a URL rewrite to `wp-login.php`. 
     RewriteCond %{REQUEST_URI} mordor/?$ [NC]
     RewriteRule mordor/?$ /wp-login.php [NC,L]
    

    Quindi l'URL: http://ex.com/mordor dovrebbe portarci alla pagina di accesso. Il motivo per cui abbiamo avuto la REDIRECTriga nel passaggio precedente è che poiché questo URL viene riscritto in un wp-*URL, non vogliamo che la prima regola di riscrittura lo ottenga. Dal momento che viene reindirizzato internamente, REDIRECT_STATUSverrà impostato correttamente e non ci spingerà a 403/4 terra.

  4. Rimuovere wp-content Wordpress.stackexchange ha un ottimo articolo sulla rimozione di wp-content. Devi ridefinire alcune costanti WP e questo funziona praticamente. Devi anche reindirizzare tutti gli accessi da wp-content"qualunque contenuto". Questo probabilmente non sarà un problema se si tratta di una distribuzione pulita. Se stai modificando una distribuzione preesistente dovrai fare alcune cose extra.

  5. Riscrivi gli URL su wp-content opzionale RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L] . Questo va nel tuo file .htaccess. Se il tuo utente tenta di accedere ad alcuni vecchi contenuti tramite un wp-contentURL, verrà reindirizzato qui.

  6. Grep e sostituisci tutti i riferimenti a wp-content nel tuo DB opzionale . Hai ancora wp-contentnel tuo database. Se vuoi liberarti di WP devi sbarazzartene. Ho esportato / mysql scaricato il mio database, fatto una ricerca e sostituito sulla wp-contentstringa con la nuova stringa. Potresti dire ... perché devo farlo se Apache riscriverà i miei URL? Il problema è che il codice sorgente conterrà questi riferimenti, quindi se sei veramente interessato a oscurare WordPress, devi farlo. Nota: a questo punto avrei dovuto semplicemente fermarmi e accettare la realtà che questo non avrebbe funzionato. Ma volevo che il signor T mi compatisse.

  7. Sostituisci tutti i riferimenti a wp-includese wp-adminnella fonte. Molte funzionalità di WordPress dipendono da queste due directory: wp-includese wp-admin. Ciò significa che questi nomi di directory sono codificati nel codice sorgente. Ciò significa che dovresti creare nuove directory (dal momento che PHP utilizza il file system del sistema operativo sottostante, non apache) per accedervi e quindi SCRIVI QUESTE nel codice HTML emesso. Questo è semplicemente troppo disturbo. Mi sono arreso rapidamente e sono andato in bagno a fare la cacca.

Lezione

Certo, avrei potuto semplicemente leggere http://codex.wordpress.org/Hardening_WordPress e seguire questi passaggi. Ma volevo il sito perfetto. Ora voglio solo tutte quelle ore indietro. La cosa più grande che mi ha impedito di fermarmi è che non ho letto da nessuna parte su Internet che questo era un sacco di lavoro e quasi impossibile da fare. Invece ho letto di persone che cercano di farlo senza avere la sensazione che abbiano avuto successo o meno. Quindi, per il mio io passato, a cui lo invierò tramite Time Machine di Apple, per favore non provare a oscurare WordPress. Non ne vale la pena.


Bene Avery, sono anche uno di quelli che vogliono essere perfetti .. Innanzitutto volevo creare un sito wordpress nascondendo il fatto che sto usando wordpress. Ho attraversato molti problemi e alla fine ho abbandonato l'idea multisito. Perché molti plugin non supportano il multisito. Il tuo settimo punto indica che hai sostituito wp-includese wp-admintesto manualmente. Sono abbastanza sicuro che hai sfogliato ogni singolo file e sostituito manualmente. Questo perché hai perso alcuni utili software utili. Ad esempio, avresti potuto provare Grepwin , il che semplifica quel lavoro
Giri,

4

Se stai cercando di nascondere che stai usando wordpress a causa dei cracker, allora hai davvero del lavoro da fare. Se fai il trucco di wp *, che dire di wp-content e wp-Includes? Senza riuscire a raggiungerli, si romperà la pagina e sembrerà orribile.

Inoltre, ci sono così tante cose in Wordpress che questo richiede davvero un po 'di lavoro - e molto probabilmente dovrai rifarlo molto quando viene installato un aggiornamento. (Poiché alcuni reindirizzamenti in Apache non faranno il trucco)

Se stai solo cercando di nasconderlo da Mr. e Mrs. tutti, ovviamente dovresti essere in grado di farlo in qualche modo con l'oscurità.

Hai letto la guida "hardening Wordpress"? In caso contrario, dovresti dare un'occhiata: http://codex.wordpress.org/Hardening_WordPress Fornisce un'ottima introduzione a molte cose che puoi fare.

Inoltre, se sei così ansioso di nascondere il fatto che usi Wordpress, perché usarlo?


1. Re: wp-content / wp-includes vedi link in post 2. Ho avuto leggere la guida indurimento WordPress. 3. La tua ultima domanda può essere facilmente risolta esaminando il link che ho pubblicato. Non sto cercando di essere scortese, ma questa domanda ha poco a che fare con i meriti tecnici della mia stessa domanda. Molte persone usano strumenti diversi ma non desiderano pubblicizzarlo. Per alcuni è una decisione commerciale.
Avery Chan,

0

Prova a fare la tua configurazione nella configurazione di Apache. Questo può essere un esempio di file simile /etc/wordpress/htaccess. Ciò ti consentirà di utilizzare la Directorydirettiva di configurazione. Tuttavia dovrai riavviare apache per caricare le modifiche. Utilizzare il riavvio corretto se non si desidera interrompere il servizio.

Per limitare gli accessi alle directory con i .htaccessfile, devono trovarsi nelle directory appropriate. Funzionano in modo molto simile al contenuto di una Directorydirettiva di configurazione. Potrebbe essere necessario abilitare le .htaccessopzioni richieste nella configurazione di apache. Questo metodo non è efficiente come l'utilizzo del comando nella configurazione di Apache in quanto deve essere ripetuto di frequente.


Sto cercando una soluzione che non richiede la modifica del mio file httpd.conf perché può essere scritto (sono su un host privato virtuale). Modificherò la domanda in modo appropriato.
Avery Chan,

@Avry: dovrai inserire le direttive che inseriresti nella configurazione <Directory> in un .htaccessfile nella directory corrispondente. Nota: Apache consiglia di utilizzare la configurazione, se possibile. Utilizzare il controllo versione per evitare sovrascritture.
BillThor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.