Frage Wie verhindere ich, dass Apache das .git-Verzeichnis bereitstellt?


Ich habe begonnen, git für die Bereitstellung von Websites zum Testen zu verwenden. Wie verhindere ich, dass Apache den Inhalt des GIT-Verzeichnisses bereitstellt?

Ich habe es versucht

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>

ohne Erfolg.

Ich weiß, dass ich eine .htaccess-Datei in jedem .git-Verzeichnis erstellen und den Zugriff verweigern kann, aber ich wollte etwas, das ich in die Hauptkonfigurationsdatei schreiben könnte, die dieses global auf allen Websites macht.


63
2018-03-31 12:11


Ursprung


Nachdem Sie verhindert haben, dass Apache das Verzeichnis bereitstellt, müssen Sie möglicherweise auch das .git-Verzeichnis mit "IndexIgnore .git" ausblenden, wenn in Ihrem Verzeichnis Indizes aktiviert sind. - Ryan


Antworten:


Es funktioniert nicht, weil du 'svn' und nicht 'git' in der Regel hast. Alles, was Sie tun müssen, ist, das 'svn' durch 'git' zu ersetzen.

<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>

46
2018-03-31 12:45



Wenn ich eine .htaccess-Datei mit nur Ihrem Code erstelle, erhalte ich den Fehler: "<DirectoryMatch ist hier nicht erlaubt" - Shoan
Es muss im Apache Conf sein. Sehen: httpd.apache.org/docs/1.3/mod/core.html#directorymatch - sinping
Die einfachste Regex ist <DirectoryMatch /\.git/> - Bachsau
Überprüfen Sie dies für die perfekte Lösung magento.stackexchange.com/questions/202840/ ... - Pratik Kamani
1., dank dem Singen / OP. Beachten Sie, dass in Apache 2.4 die Zeile "Order, deny" und die nächste Zeile durch "Require all denied" ersetzt wurden. Auch bei vielen Installationen heißt die oben genannte Datei "Apache conf" "httpd.conf" --- die Verwendung von singping war nur eine zufällige Aussage, also suche nicht nach diesem wörtlichen Namen (sollte wohl selbstverständlich sein, aber du weißt nie wie Leute es lesen könnten). - Kevin_Kinsey


Dies hat die gleiche Wirkung wie viele der anderen Antworten, ist aber viel einfacher:

RedirectMatch 404 /\.git

Dies kann eintreten .htaccess oder Ihre Server-Konfigurationsdatei. Es blendet jede Datei oder jedes Verzeichnis aus, dessen Name mit beginnt .git (z.B. a .git Verzeichnis oder .gitignore Datei), indem Sie eine 404 zurückgeben. So ist nicht nur der Inhalt Ihres Git Repos versteckt, sondern auch seine Existenz.


122
2017-08-01 10:19



Ich mag diese Lösung wirklich. Es ist einfach und elegant. - Shoan
Dies in das Root-Verzeichnis htdocs zu tun, macht auch eine globale Aufgabe. - jor
Liebe diese Option auch das Beste. Mir scheint, dass es sicherer ist, einen 404 für Anfragen wie /.git oder /.gitigore zurückzugeben, so dass die Tatsache, dass git überhaupt benutzt wird, nicht von außen bestimmt werden kann. - Ezra Free
Beachten Sie, dass bei aktivierter Verzeichnisliste die .git Ordner werden weiterhin angezeigt, aber Sie erhalten den 404, wenn Sie versuchen, auf sie zuzugreifen. - Andy Madge
@BennettMcElwee Ja, einverstanden, es gibt fast nie einen guten Grund, die Verzeichnisliste global auf einem Produktionsserver zu aktivieren. Ich dachte nur, es wäre eine Erwähnung wert, falls es jemanden erwischen würde. - Andy Madge


Wenn Sie keine .htaccess-Dateien verwenden, sondern stattdessen /etc/apache2/httpd.conf (oder die Master-Conf-Datei Ihres Servers) verwenden möchten, um sowohl .git-Verzeichnisse als auch .gitignore-Dateien auszublenden, können Sie Folgendes verwenden. Ich fand die Antwort oben für Master-Conf Einstellung versteckt die Gitignore-Datei nicht.

# 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>

13
2017-08-28 21:49



Blockiert nicht die www.example.com/.git/config Datei in Apache httpd 2.4.27. - ilhan


Wenn Sie auf einem freigegebenen Hosting-Dienst sind und keinen Zugriff darauf haben apache.conf, Sie können es immer noch in Ihrer .htaccess-Datei tun, so:

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

10
2018-03-23 19:21



Danke, das funktionierte für mich in einer Shared-Hosting-Situation, wo die Top-Antwort nicht war - Plato


### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+

Das funktioniert in .htaccess, Nein http.conf Zugang erforderlich. Fügen Sie dies als erste Regel zum Umschreiben ein. Vorbereiten Rewrite On wenn benötigt.

Aus Sicherheitsgründen bevorzuge ich einen falschen 404 über einen 403, informativer für den Angreifer. Kommentiere eines der beiden heraus, um sicherzustellen, dass das andere auch für dich funktioniert.

Übrigens, gute Änderungen sind, dein Lithmus-Test für die beiden sind:

http://localhost/.gitignore
http://localhost/.git/HEAD

6
2018-05-26 10:08



Warum haben beide Regeln? Die einfachere RedirectMatch reicht allein aus. (Auch die Regexes scheinen nicht ganz richtig - warum das Plus am Ende?) - Bennett McElwee
Persönliche Paranoia / doppelte Sicherheit. Wenn RewriteEngine abgestellt wird (zentrale Konfigurationsänderungen, schlechte Teamkommunikation, unglücklicher Server "update", ... nennen Sie es :-) Das + ist obsolet oder sollte ein $, guter Punkt sein! (keine Zeit zum Testen, sorry.) - Frank Nocke
Wenn Sie befürchten, dass RewriteEngine ausgeschaltet ist, legen Sie einfach RewriteEngine On vor deiner RewriteRule. Aber irgendwie ist es tautologisch und redundant, weil die einfachere RedirectMatch allein ausreicht. Obwohl sogar das vereinfacht werden könnte. Grundsätzlich empfehle ich meine Antwort stattdessen. :) - Bennett McElwee
+1 für den Lackmustest.


Verwenden Sie zum Schützen des .git-Verzeichnisses sowie anderer Dateien wie .gitignore und .gitmodules mit .htaccess:

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"

5
2017-10-28 22:04



Funktioniert für mich, aber das nachfolgende ErrorDocument hat keine Auswirkungen. Aus Sicherheitsgründen würde ich dem Angreifer einen falschen 404 über einen informativen 403 vorwerfen ... - Frank Nocke
Dies ist eine schlechte Idee, da es Informationen für Hacker offenbart. A 403 bedeutet, dass es da ist, 404 bedeutet, dass es nicht ist. Jede Tatsache auf einem Server Setup ist nützlich für einen Hacker. Ich würde darüber nachdenken, dies zu überarbeiten. - GerardJP


Ich füge immer die folgende Zeile in Vhost Vorlage

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

Nur um sicher zu sein, dass niemand auf VCS-spezifische Daten zugreifen kann. Funktioniert perfekt.


3
2018-03-18 15:48





Angenommen, Ihr Webserver verwendet einen anderen Benutzer als den, mit dem Sie auf das .git-Repository zugreifen, können Sie das Ausführungsbit für andere Benutzer im .git-Verzeichnis deaktivieren.

Dies sollte mit anderen Webservern funktionieren und ist nicht auf leistungsaufwendige .htaccess-Dateien angewiesen.


1
2017-12-11 15:09