Seguretat: No exposar els fitxers del directori .git al directori públic de la web

Els projectes que utilitzen git per desplegar fitxers als servidors de producció poden exposar el seu codi font a través del directori /.git que GIT genera quan es sincronitza amb el repositori de codi. Exposar aquests fitxers pot significar un problema de seguretat que cal evitar. 

La solució immediata hauria de ser impedir que el servidor serveixi els fitxers del directori /.git del servidor, i posteriorment configurar el repositori git i la carpeta del projecte de tal manera que la carepta /.git no estigui mai en un directori d'accés públic.

La forma preferent de bloqueig ha de ser servir un error 404, per no donar informació de si aquell directori existeix o no.

Caldria aplicar les solcucions de bloqueig 1 i/o 2 el més aviat possible en el cas de servidor Apache per acabar aplicant la solució 3 més estructural. En tot cas es recomana mantenir la solució 2 i 3 sempre per seguretat simultàniament.

1. Com bloquejar l'accés als fitxers de la carpeta /.git a nivell d'aplicació

Cal afegir o editar el fitxer .htaccess al directori on apunta el domini o subdomini de la web amb la següent directiva:

RedirectMatch 404 /\.git

Això bloquejarà l'accés en aquest projecte.

2. Com bloquejar l'accés als fitxers de la carpeta /.git a nivell de servidor web

Afegir la següent directiva al fitxer apache2.conf o similar on es configura els ervidor apache.

RedirectMatch 404 /\.git

Això bloquejarà l'accés al directori /.git a tots els projectes que serveixi aquest servidor web.

3. Configurar una carpeta pública del projecte i apuntar el virtual host a la carpeta pública i no a l'arrel del projecte

Una solució més estructural és que la carpeta /.git no sigui accessible directament i no estigui en cap directori públic. Per fer això caldrà configurar el virtualhost del subdomini perquè apunti a una carpeta pública on residerà el codi que ha de ser accesible:

SUBDOMINI o DOMINI => /directori/carpeta-projecte/public

I configruarem el git un nivell abans fora del directori públic => /directori/carpeta-projecte/.git

De la mateixa manera que es recomana que les llibreries o dependencies no estiguin al directori públic per seguretat com fan Symfony i altres frameworks.

4. Migració d'un projecte sense carpeta pública

Per migrar a projecte que no disposi de carpeta pública i estigui exposant tots els fixers del projecte caldrà crear una carpeta /public al repositori de codi i moure tot el codi a dins d'aquesta carpeta.

Després caldrà ajustar el virtual host perquè apunti a la carpeta /public del projecte i resincronitzar el codi del git perquè faci el moviment dels fitxers de l'arrel a la carepta pública.

Ens haurem d'assegurar que el domini o subdomini apunten a nivell de virtual host a la nostre carpeta pública, i que la carpeta /.git no estigui dins de la carpeta pública del nostre projecte.

Estructura correcte:

/carpeta-projecte/.git/
/carpeta-projecte/public/ <== index.php i directori on apunta el DOMINI o SUBDOMINI
/carpeta-projecte/vendor
/carpeta-projecte/var
etc.

Estructura insegura si no es bloqueja l'accés a la carpeta /.git:

/carpeta-projecte/.git/
/carpeta-projecte/ <== index.php i directori on apunta el DOMINI o SUBDOMINI
/carpeta-projecte/vendor
/carpeta-projecte/var
etc.
1
Grups de treball:
Plataforma PHP