Refuser l'accès.dossiers svn sur Apache

Nous avons une application rails dans subversion que nous déployons avec Capistrano mais nous avons remarqué que nous pouvons accéder aux fichiers dans '/.svn", qui présente un problème de sécurité.

, je voulais savoir quelle est la meilleure façon de le faire. Quelques idées:

  • configuration Apache globale pour refuser l'accès
  • Ajout .fichiers htaccess dans le dossier public et tous les sous-dossiers
  • tâche Cap qui modifie les autorisations

Je n'aime pas vraiment l'idée de supprimer le dossiers ou en utilisant SVN export, puisque je voudrais garder les "informations svn" autour.

56
demandé sur csexton 2008-12-29 19:12:04

12 réponses

La meilleure option est d'utiliser la configuration Apache.

L'utilisation de htaccess ou de la configuration globale dépend principalement de si vous contrôlez votre serveur.

Si vous le faites, vous pouvez utiliser quelque chose comme

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

Si vous ne le faites pas, vous pouvez faire quelque chose de similaire dans .fichiers htaccess avec FilesMatch

63
répondu Vinko Vrsalovic 2008-12-29 16:36:08

Une autre façon de protéger la .les fichiers svn seraient d'utiliser une redirection dans la configuration Apache:

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

Donc, au lieu d'obtenir un 403 forbidden (et de fournir des indices aux attaquants potentiels), vous obtenez un 404, ce à quoi nous nous attendons lorsque nous tapons aléatoirement des chemins.

43
répondu csexton 2008-12-29 18:14:50

Je n'aime pas l'idée de 404ing chaque fichier startig avec un point. J'utiliserais une approche plus sélective, soit avec les CV que j'utilise dans le projet (svn dans l'exemple)

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

Ou un catch tous les systèmes cvs

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

-- réponse obsolète suit (voir Commentaires) --

Je ne peux pas encore écrire de commentaires... La réponse de csexton est incorrecte, car un utilisateur ne peut pas accéder à la .dossier svn, mais peut accéder à tous les fichiers à l'intérieur ! par exemple, vous pouvez accès http://myserver.com/.svn/entries

La règle correcte est

RedirectMatch 404 /\\.svn(/.*|$)
30
répondu Riccardo Galli 2011-11-05 12:54:22

Je pense que Riccardo Galli a eu raison. Même apache avait déjà .configuration svn comme interdit pour moi, mais .svn / entrées était certainement disponible...exposer mon serveur svn, numéro de port, noms d'utilisateur, etc.

Je me dis en fait, pourquoi ne pas restreindre .git comme mesure préventive (disons que vous n'utilisez pas encore git mais peut-être un jour auquel vous ne penserez pas aux restrictions de répertoire).

Et puis j'ai pensé, pourquoi ne pas restreindre tout ce qui devrait être caché de toute façon? Quelqu'un peut-il concevoir d'un problème avec cela?

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

J'ai ajouté le".* 'après la période initiale-seule différence de Riccardo. Semble 404 .le svn .Git, .bla, etc.

14
répondu triemstr 2011-03-13 02:01:27

Je préférerais refuser l'accès à tous les fichiers point (par exemple: .htaccess, .le svn .xxx, etc.), car ils n'ont normalement pas besoin d'être accessibles sur le web.

Voici la règle pour y parvenir (Jusqu'à ce Qu'Apache 2.2 soit inclus):

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

(UPDATE) ou vous pouvez utiliser ce qui suit (qui fonctionne dans Apache 2.2 et 2.4):

# Deny access to dot-files, as 404 error
# (not giving hint about potential existence to the file)
RedirectMatch 404 ".*\/\..*"
6
répondu Christophe Deliens 2016-04-11 15:28:07

Ceci:

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

Peut également être utilisé si vous ne souhaitez pas envoyer une erreur à l'utilisateur.

C'est seulement rediriger vers la page racine du site. En outre, il s'agit d'une redirection permanente, de sorte que les robots n'essaieront pas de réindexer cette URL.

2
répondu Mikaciù 2013-04-08 19:55:57

Un RedirectMatch répondra avec un 404, ce qui est génial.

Cependant, si "options + Index" est activé, les utilisateurs pourront toujours voir le'.svn' répertoire à partir du répertoire Parent.

Les utilisateurs ne pourront pas entrer dans le répertoire - c'est là que le '404 Not Found' entre en jeu. Cependant, ils seront en mesure de voir le répertoire et de fournir des indices aux attaquants potentiels.

1
répondu Stefan Lasiewski 2010-02-23 01:21:25

Il me semble, Apache conf devrait être:

<Directory ~ "\.svn">
    Order allow,deny
    Deny from all
</Directory>
1
répondu Xorax 2011-05-22 22:30:33

Je ne suis pas très friand de RedirectMatch, donc j'ai utilisé un RewriteRule à la place:

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

Le Trait d'Union signifie "Ne pas faire de substitution". Je ne pouvais pas non plus comprendre pourquoi, dans les exemples ci-dessus, l'expression rationnelle avait deux barres obliques inverses:

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

J'en ai donc sorti un et ça marche bien. Je ne comprends pas pourquoi vous en utiliseriez deux là-bas. Quelqu'un pour m'éclairer?

1
répondu Spanky 2015-05-20 17:28:48

Apache Subversion FAQ sugesting cette solution:

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

Source: https://subversion.apache.org/faq.html#website-auto-update

1
répondu M_per 2016-04-19 09:47:43

Dans .htaccess sur votre fichier de configuration du serveur.

(1)

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

Et (2)

RedirectMatch 404 /\.git

Placez ces deux méthodes dans le fichier .htaccess.

Il cache tout fichier ou répertoire dont le nom commence par .git comme .répertoire git ou .gitignore fichier en retournant un 404.

0
répondu Pratik Kamani 2017-11-23 04:46:12

Créez un fichier de droits d'accès dans votre installation subversion server.

Par exemple si votre structure de dossier est

/svn

/svn/droits/svnauth.conf

Créez un fichier de configuration et entrez le chemin de ce fichier dans votre fichier de configuration Apache subversion que vous trouverez normalement dans / etc/httpd / conf.d / subversion.conf

Dans votre svnauth.fichier conf définir les droits comme:

Droits d'Accès pour Foo.com

[foo. com: / trunk / source]

Dev1 = rw

Dev2 = rw .....

De cette façon, vous pouvez contrôler les droits d'accès à partir d'un seul fichier et à un niveau très granulaire.

Pour plus d'informations, consultez le livre rouge svn.

-7
répondu user49550 2008-12-29 17:07:44