2010-03-02 18 views
6

Il mio sito Web è un repository mercuriale con più sottopriposizion. Devo assicurarmi di negare l'accesso a tutti i file in ogni directory .hg sul server.Sicurezza: negare l'accesso a .hg/* tramite mod_rewrite

Ad esempio, ho http://example.com/.hg/ e http://example.com/subrepo1/.hg/

ho aggiunto quanto segue in .htaccess:

<Files ~ "^\.(hg|ht)"> 
    Order allow,deny 
    Deny from all 
</Files> 

Questo è un buon inizio, in quanto nega l'accesso a file che iniziano con .hg e .ht , ma non nega l'accesso ai file all'interno delle directory .hg, quindi se qualcuno digita, ad esempio http://example.com/.hg/branch, il file di diramazione verrà visualizzato nel browser.

Cosa devo fare per assicurarmi che questi file non vengano visualizzati all'utente? Vorrei inviare un 403 o un 404 al browser se qualcuno tenta di accedere a un file all'interno di qualsiasi directory .hg sul mio server.

Questa domanda è rilevante anche per chiunque il cui sito Web sia un repository di svversione/svn.

risposta

7

Se non avete usare mod_rewrite, allora si può solo fare questo:

RedirectMatch 404 /\\.hg(/|$) 

(Full disclosure: risposta adeguata per Mercurial da this question di fare la stessa cosa per Subversion).

+0

Ricevo un errore 500 quando provo qualcosa con Directory, DirectoryMatch, Location o LocationMatch, quindi penso che non sia consentito all'interno .htaccess. Il RedirectMatch funziona comunque come un incantesimo. Grazie! – Tex

+0

@Tex - Lo modificherò - sembra che l'OP della domanda SVN abbia avuto problemi a far funzionare 'DirectoryMatch'. –

+0

La mia comprensione è che 'Directory',' DirectoryMatch', 'Location' e' LocationMatch' non sono consentiti in .htaccess. – Tex

0

Hai sempre la possibilità di inserire file .htaccess in queste cartelle e negare tutti gli accessi all'interno della cartella.

Suppongo che tu voglia una soluzione, in cui non devi inserire i file .htaccess in ogni cartella e sottocartella?

Provare quanto segue (supponendo che hanno accesso ssh al server web):

  • Modifica nella DocumentRoot del vostro sito
  • creare un file .htaccess

Content:

Order deny, allow 
Deny from all 
  • eseguire il seguente comando:

    find . -type d -name .hg -exec cp ./.htaccess {} \;

  • Successivamente eliminare il file .htaccess dalla principale del documento di nuovo

+0

Ciao, mi piace anche questa soluzione, ma ha uno svantaggio: i file all'interno delle directory .hg non sono versionati e sono abbastanza sicuro che non siano inclusi in un nuovo clone di un repository. Ciò significa che dovrei ripetere questo passaggio se mai ricomincio da un nuovo clone, poiché i file .hg/.htaccess non verranno automaticamente inclusi nel clone, se non sbaglio. – Tex

+0

Sì, penso che tu abbia ragione. Su un nuovo clone non sarebbe incluso. – Aurril

0

Questo è molto meno di una preoccupazione se continui i repository di fuori della vostra DocumentRoot del tutto. Probabilmente stai usando hgweb o hgwebdir, che non richiede che i file si trovino all'interno di DocumentRoot, quindi non farlo. Mettili in/home/hg/repos o qualcosa di simile e configura il tuo hgwebdir.conf in modo che guardi lì.

L'unico motivo per cui i repository all'interno di DocumentRoot consentirebbero il modulo URL http statico per mercurial, ma è molto lento e hweweb è sempre preferito quando è possibile.