J'ai commencé à utiliser git pour le déploiement de sites Web à des fins de test. Comment empêcher Apache de servir le contenu du répertoire .git?
J'ai essayé
<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>
sans succès.
Je sais que je peux créer un fichier .htaccess dans chaque répertoire .git et refuser l'accès, mais je voulais quelque chose que je pourrais mettre dans le fichier de configuration principal qui le rend mondial sur tous les sites Web.
Cela ne fonctionne pas parce que vous avez 'svn' et pas 'git' dans la règle. Tout ce que vous avez à faire est de remplacer le 'svn' par le 'git'.
<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>
Cela a le même effet que la plupart des autres réponses mais est beaucoup plus simple:
RedirectMatch 404 /\.git
Cela peut aller dans .htaccess
ou votre fichier de configuration du serveur. Il masque tout fichier ou répertoire dont le nom commence par .git
(par exemple, un .git
répertoire ou .gitignore
file) en renvoyant un 404. Donc non seulement le contenu de votre dépôt Git est caché, mais son existence même est cachée aussi.
Si vous n'utilisez pas de fichiers .htaccess mais souhaitez utiliser à la place /etc/Apache2/httpd.conf (ou tout autre fichier de configuration principal de votre serveur) pour masquer les répertoires .git et les fichiers .gitignore, vous pouvez utiliser ce qui suit. J'ai trouvé la réponse ci-dessus pour que le paramètre de configuration maître ne masque pas le fichier gitignore.
# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
Order deny,allow
Deny from all
</Directorymatch>
<Files ~ "^\.git">
Order allow,deny
Deny from all
</Files>
Si vous êtes sur un service d'hébergement partagé et n'avez pas accès à Apache.conf, vous pouvez toujours le faire dans votre fichier .htaccess, comme ceci:
RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]
# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+
Cela fonctionne dans .htaccess
, non http.conf
accès requis. Incluez-le comme première règle de réécriture. Prepend Rewrite On
si besoin.
Du point de vue de la sécurité, je préfère un faux 404 à un 403, plus informatif pour l'attaquant. Commentez l'un des deux pour vous assurer que l'autre fonctionne aussi pour vous.
Btw, de bons changements sont, votre test lithmus pour les deux sont:
http://localhost/.gitignore
http://localhost/.git/HEAD
Pour protéger le répertoire .git ainsi que d'autres fichiers tels que .gitignore et .gitmodules à l'aide de .htaccess, utilisez:
RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"
J'ajoute toujours la ligne suivante dans le modèle vhost
RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
Juste pour être sûr que personne ne peut accéder aux données spécifiques à VCS. Fonctionne parfaitement.
Pour ceux qui cherchent simplement à refuser tous les fichiers et répertoires "cachés" d'une distribution Linux (généralement tous les fichiers commençant par un "."), Voici ce qui fonctionne sur Apache 2.4 lorsqu'il est placé dans le contexte de configuration du serveur:
<FilesMatch "^\.(.*)$">
Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
Require all denied
</DirectoryMatch>
Et voici l'ancien style Apache 2.2 (même regex, juste des directives d'authentification différentes):
<FilesMatch "^\.(.*)$">
Order deny,allow
Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
Order deny,allow
Deny from all
</DirectoryMatch>
Ensuite, vous n'avez pas à vous soucier de .git
ou .svn
Plus précisément. Cela correspondrait également à des choses comme .htaccess
et .htpasswd
intrinsèquement.
Personnellement, j'aime émettre 403 pour de telles demandes au lieu de 404, mais vous pouvez facilement utiliser un RewriteRule au lieu d'un refus d'auth, comme ceci:
<FilesMatch "^\.(.*)$">
RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>
En supposant que votre serveur Web utilise un utilisateur différent de celui que vous utilisez pour accéder au référentiel .git, vous pouvez désactiver le bit d'exécution pour les autres sur le répertoire .git.
Cela devrait fonctionner avec d'autres serveurs Web et ne dépend pas de fichiers .htaccess gourmands en performances.
C'est un peu tard, mais ma réponse est légèrement différente, j'ai donc pensé l'ajouter. Cela doit aller dans le fichier httpd.conf. Le <Files "*">
Imbriqué dans la balise <Directory>
Bloquera tous les fichiers du répertoire.
# GitHub Directory
<Directory /var/www/html/yoursite/.git>
Order Deny,Allow
Deny from all
<Files "*">
Order Deny,Allow
Deny from all
</Files>
</Directory>
# GitHub files
<Files .gitignore>
order Deny,Allow
Deny from all
</Files>
Vous voulez probablement refuser de servir .gitignore
ainsi que.
Les fichiers commençant par un point sont cachés sous Linux.
Par conséquent, juste 404 tout ce qui commence par un point:
RedirectMatch 404 /\.