Domanda

Abbiamo un'applicazione Rails in Subversion che si distribuisce con Capistrano, ma abbiamo notato che siamo in grado di accedere ai file in '/.svn', che presenta un problema di sicurezza.

Volevo sapere qual è il modo migliore per fare questo. Un paio di idee:

  • configurazione globale di Apache per negare l'accesso
  • L'aggiunta di file .htaccess nella cartella pubblica e tutte le sottocartelle
  • compito Cap che cambia i permessi

non mi piace molto l'idea di eliminare le cartelle o utilizzando l'esportazione svn, dal momento che vorrei mantenere il 'informazioni svn' in giro.

È stato utile?

Soluzione

L'opzione migliore è quella di utilizzare la configurazione di Apache.

Utilizzando htaccess o configurazione globale dipende principalmente se controlli il server.

Se lo fai, è possibile usare qualcosa come

<DirectoryMatch .*\.svn/.*>
    Deny From All
</DirectoryMatch>

Se non si, si può fare qualcosa di simile in file .htaccess con FilesMatch

Altri suggerimenti

Un altro modo per proteggere i file Svn sarebbe quella di utilizzare un redirect nella configurazione di Apache:

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

Così, invece di ottenere un 403 Forbidden (e fornendo indizi per sarebbe attaccanti) si ottiene un 404, che è quello che ci si aspetterebbe quando si digita in modo casuale in percorsi.

Non mi piace l'idea di 404ing ingegno ogni file startig un punto. Userei un approccio più selettivo, sia con i CV che sto utilizzando nel progetto (svn nell'esempio)

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

o una cattura tutti i sistemi CVS

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

- risposta obsoleto segue (vedi commenti) -

Non posso scrivere commenti eppure così ... La risposta di csexton non è corretta, perché un utente non può accedere alla cartella svn, ma può accedere a qualsiasi file al suo interno! per esempio. è possibile accedere http://myserver.com/.svn/entries

La regola corretta è

RedirectMatch 404 /\\.svn(/.*|$)

Credo che Riccardo Galli capito bene. Anche apache aveva già messa a punto .svn come proibito per me, ma .svn / voci era certamente a disposizione ... esporre il mio server svn, il numero di porta, nomi utente, ecc.

Io in realtà capire, perché non limita .git come misura preventiva (dico di non utilizzare git ancora, ma potrebbe un giorno e in quel momento non sarà pensare a restrizioni di directory).

E poi ho pensato, perché non limitare tutto ciò che dovrebbe essere nascosto in ogni caso? Chiunque può concepire un problema con questo?

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

ho aggiunto il dopo il periodo iniziale '*.' - unica differenza da Riccardo. Sembra 404 .svn, .git, .blah, ecc.

avrei preferito negare l'accesso a tutti i file di punti (ad esempio: .htaccess, .svn, .xxx, etc.), come avviene normalmente non hanno bisogno di essere accessibile dal Web

.

Ecco la regola per raggiungere questo obiettivo (fino Apache 2.2 inclusa):

<LocationMatch "\/\..*">
    Order allow,deny
    Deny from all
</LocationMatch>

(UPDATE) In alternativa, è possibile utilizzare il seguente (che opera in Apache 2.2 e 2.4):

# Deny access to dot-files, as 404 error
# (not giving hint about potential existence to the file)
RedirectMatch 404 ".*\/\..*"

Questa:

RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* /

può essere utilizzato anche se non si desidera inviare un errore indietro per l'utente.

E 'solo il reindirizzamento al sito rootpage. Inoltre, questo è un redirect permanente, quindi i robot non cercheranno di reindicizzare questo URL.

Un RedirectMatch risponderà con un 404, che è grande.

Tuttavia, se "Opzioni + indici" è abilitato, gli utenti saranno ancora in grado di vedere la directory '.svn' dalla directory genitore.

Gli utenti non saranno in grado di entrare nel directory-- questo è dove il '404 Not Found' è disponibile in. Tuttavia, essi saranno in grado di vedere la directory e fornire indizi per sarebbe attaccanti.

mi sembra a me, Apache conf dovrebbe essere:

<Directory ~ "\.svn">
    Order allow,deny
    Deny from all
</Directory>

Io non sono tutto ciò che appassionato di RedirectMatch, così ho usato un RewriteRule invece:

RewriteRule /\..*(/.*|$) - [R=404,L]

Il trattino significa "non fare alcuna sostituzione". Anche io non riuscivo a capire perché, negli esempi precedenti, l'espressione regolare aveva due backslash:

/\\..*(/.*|$)

Così ho preso uno fuori e funziona benissimo. Io non riesco a capire il motivo per cui si può usare due lì. Qualcuno cura di illuminarmi?

Apache Subversion FAQ è sugesting questa soluzione:

# Disallow browsing of Subversion working copy administrative dirs.
<DirectoryMatch "^/.*/\.svn/">
    Order deny,allow
    Deny from all
</DirectoryMatch>

fonte: https://subversion.apache.org/faq.html# sito-auto-update

RedirectMatch come altre direttive da mod_alias è case sensitive anche su file system case-insensitive (vedi mod_alias documentazione ). Quindi, le risposte di cui sopra sulla corrispondenza e bloccando file di tutti i sistemi di controllo versione non sono corrette.

Al posto di

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

o

RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* /

qualcosa di simile a ciò è necessario

RedirectMatch 404 "(?i)/\.?(cvs|svn|git|hg|bzr)"

per bloccare davvero tutto, perché

  • le directory CVS sono maiuscoli; e
  • non iniziare con un punto (.) Davanti.

Mi auguro che aiuta.

In .htaccess sul file server di configurazione.

(1)

RewriteEngine on
RewriteRule "^(.*/)?\.git/" - [F,L]

E (2)

RedirectMatch 404 /\.git

Inserisci questo sia di metodo nel file di .htaccess.

Si nasconde qualsiasi file o directory il cui nome inizia con .git come directory .git o .gitignore lima restituendo un 404.

Creare un file di diritti di accesso nella vostra installazione del server sovversione.

per esempio se la struttura della cartella è

/ svn

/svn/rights/svnauth.conf

creare un file di configurazione e immettere il percorso del file nel file di configurazione di Apache Subversion che si sarebbe normalmente trovare in /etc/httpd/conf.d/subversion.conf

Nel file svnauth.conf definire i diritti come:

diritti di accesso per foo.com

[foo.com:/trunk/source]

dev1 = rw

DEV2 = rw .....

In questo modo è possibile controllare i diritti di accesso da un unico file che a livello granulare molto.

Per ulteriori informazioni sfogliare il libro rosso svn.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top