Question

Nous avons une application rails dans la subversion que nous déployons avec Capistrano mais nous avons remarqué que nous pouvons accéder aux fichiers « /.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 globale Apache de refuser l'accès
  • Ajout de fichiers .htaccess dans le dossier public et tous les sous-dossiers
  • Cap tâche qui modifie les autorisations

Je ne aime pas vraiment l'idée de supprimer les dossiers ou en utilisant svn export, depuis que je voudrais garder les « info svn » autour.

Était-ce utile?

La solution

La meilleure option est d'utiliser la configuration Apache.

Utilisation htaccess ou configuration globale dépend principalement si vous contrôlez votre serveur.

Si vous le faites, vous pouvez utiliser quelque chose comme

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

Si vous n'êtes pas, vous pouvez faire quelque chose de similaire dans les fichiers .htaccess avec FilesMatch

Autres conseils

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

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

Ainsi, au lieu d'obtenir un 403 interdit (et de fournir des indices pour les attaquants seraient), vous obtenez un 404, ce qui est ce que nous attendons en tapant au hasard dans les chemins.

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

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

ou une prise tous les systèmes cvs

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

- réponse suit pas à jour (voir commentaires) -

Je ne peux pas écrire des commentaires pourtant si ... La réponse de csexton est incorrect, parce qu'un utilisateur ne peut pas accéder au dossier svn, mais peut accéder à tous les fichiers à l'intérieur! par exemple. vous pouvez accéder à http://myserver.com/.svn/entries

La règle est correcte

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

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

Je figure en fait, pourquoi ne pas restreins .git comme une mesure préventive (par exemple ne pas utiliser git encore, mais peut-être un jour à quel moment vous ne serez pas penser à des restrictions d'annuaire).

Et puis je pensais, pourquoi ne pas limiter tout ce qui doit être caché de toute façon? Quelqu'un peut-il concevoir un problème avec cela?

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

J'ai ajouté après la période initiale « *. » - seule différence de Riccardo. Semble 404 svn, .git, .blah, etc.

Je préférerais refuser l'accès à tous les points-fichiers (par exemple: .htaccess, svn, .xxx, etc.), car ils ne normalement pas besoin d'être accessible sur le Web

.

Voici la règle pour y parvenir (jusqu'à Apache 2.2 inclus):

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

(UPDATE) Ou vous pouvez utiliser les éléments suivants (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 ".*\/\..*"

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

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

Il est seulement rediriger vers le site rootpage. En outre, c'est une redirection permanente, de sorte que les robots ne seront pas essayer de réindexer cette URL.

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

Cependant, si « Options + Indexes » est activée, les utilisateurs seront toujours en mesure de voir le répertoire « .svn » à partir du répertoire parent.

Les utilisateurs ne seront pas en mesure d'entrer dans le directory-- c'est là le « 404 Not Found » entre en jeu. Ils seront toutefois en mesure de voir le répertoire et fournir des indices serait attaquants.

Je me semble, Apache devrait être conf:

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

Je ne suis pas tout ce qui aime RedirectMatch, donc j'utilisé un RewriteRule à la place:

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

Le trait d'union signifie « ne font pas de substitution ». Je ne pouvais pas non comprendre pourquoi, dans les exemples ci-dessus, le regex avait deux barres obliques:

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

Alors j'ai pris un et il fonctionne très bien. Je ne peux pas comprendre pourquoi vous utilisez deux là. Quelqu'un peut me éclairer?

Apache Subversion FAQ est 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# -auto-mise à jour du site

RedirectMatch comme les autres directives de mod_alias est sensible à la casse, même sur les systèmes de fichiers insensibles à la casse (voir documentation mod_alias ). Ainsi, les réponses ci-dessus sur les fichiers correspondant et le blocage de tous les systèmes de contrôle de version ne sont pas correctes.

Au lieu de

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

ou

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

quelque chose comme cela est nécessaire

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

pour bloquer vraiment tout, parce que

  • répertoires CVS sont en majuscules; et
  • ne commence pas par un point (.) Devant.

J'espère que cela aide.

Dans .htaccess sur votre fichier de configuration du serveur.

(1)

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

(2)

RedirectMatch 404 /\.git

Placez cette fois la méthode dans le fichier .htaccess.

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

Créer un fichier de droits d'accès à l'installation du serveur subversion.

si vous par exemple la structure du dossier est

/ svn

/svn/rights/svnauth.conf

créer un fichier de configuration et entrez le chemin de ce fichier dans votre fichier de configuration de la subversion apache que vous trouveriez normalement à /etc/httpd/conf.d/subversion.conf

Dans votre fichier svnauth.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 d'un seul fichier et au niveau plus granulaire.

Pour plus d'informations Péruse le livre rouge svn.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top