Versionierungssoftware erfreut sich unter Webentwicklern großer Beliebtheit. Am häufigsten dürfte das Git sein. Leider wird in Produktivumgebungen gerne mal vergessen, das Repository Verzeichnis (z.B. .git) vor fremdem Zugriff zu schützen. Neben vollem Zugriff auf den Quelltext einer Webseite enthalten Repositories oft auch Datenbank Passwörter, API Zugangsdaten für Cloud Dienste wie Amazon AWS, Salts und Hashes. Noch brisanter wird es, wenn z.B. csv Dateien oder SQL Dumps mit persönlichen Daten enthalten sind.
Recherchen z.B. von Internetwache.org oder Jamie Brown haben ergeben, dass eine durchaus beträchtliche Anzahl von Webseiten von diesem Problem betroffen sind.
Im Internet gibt es diverse Tools, die das Auslesen von Git oder Subversion Verzeichnissen ermöglichen, auch wenn z.B. das Directory Listing abgeschaltet ist.
Ob das eigene Git Verzeichnis über das Web erreichbar ist, kann mit dem Aufruf von www.domain.tld/.git/config schnell überprüft werden. Wenn man eine Fehlermeldung erhält, ist alles gut. Andernfalls sollte man sich schleunigst um eine Absicherung kümmern!
Wie kann man die Lücke schließen?
Apache
Am einfachsten geht das über die globale Konfiguration des Webservers, z.B. /etc/apache2/conf.d/security oder in der vhost Konfiguration:
<DirectoryMatch "/\.git">
Require all denied
</DirectoryMatch>
<DirectoryMatch "/\.svn">
Require all denied
</DirectoryMatch>
In Shared Hosting Umgebungen ohne direkten Zugriff auf die vhost Konfiguration kann man den Zugriff über einen Eintrag in der .htaccess Datei verhindern:
RewriteEngine On
RewriteRule ^\.git – [L,R=404]
RewriteRule ^\.svn – [L,R=404]
Nginx
Bei Nginx hilft dieses Codeschnipsel:
location ~ /.git/ {
deny all;
}
Wenn diese Zeilen im server-Block der nginx.conf Datei plaziert werden, greift die Sperre.
IIS 7+
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment=".git" />
<add segment=".svn" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Der Schnipsel muss in der web.config Datei oder über die GUI eingetragen werden.
Übrigens, die mit aktuellen Versionen von TYPO3 mitgelieferte _.htaccess enthält bereits einen Schutz für .git, .svn und .hg Verzeichnisse. Die Datei muss nur in .htaccess umbenannt werden, um den Schutz zu aktivieren.