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.
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
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.
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(/.*|$)
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.
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 ".*\/\..*"
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.
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.
Il me semble, Apache conf devrait être:
<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>
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?
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
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.
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.