Accesso Autenticato

Directory ad Accesso Limitato

Questo esempio segue i nomi files della versione Unix di Apache, ma per la versione Debian è completamente equivalente.

Nella DocumentRoot creare una directory restricted e una pagina HTML di prova:

cd /var/www/localhost/htdocs
mkdir restricted
cd restricted
vi index.html
<html>
 <head>
  <title>Club Privato</title>
 </head>
 <body bgcolor="white">
  <h1>Ciao</h1>
 </body>
</html>

Autenticazione Basic

Scrivere il file di limitazione accessi nella directory riservata:

vi .htaccess
AuthType        Basic
AuthName        "Restricted Access"
AuthUserFile    /etc/apache2/users

<Limit GET>
require valid-user
</Limit>

Modificare i permessi del file di configurazione globale /etc/apache2/httpd.conf

Nella sezione di protezione della directory corrispondente al DocumentRoot, da:

AllowOverride None

a

AllowOverride AuthConfig Limit

Generare il file dei permessi:

cd /etc/apache2
htpasswd -mc users pippo
Password:pluto
Repeat password:pluto

Restartare il server:

httpd -k restart

Restricted

Analisi del Traffico

Chiudere il browser poi riaprirlo, poichè usa delle cache.

Installare l'utility tcpdump su Alpine:

apk add tcpdump

Aprire la cattura di traffico con dump ASCII con:

tcpdump -A

Aprire il browser e connettersi a localhost:8888/restricted, dando l'utente pippo e la password pluto.

Controllare il traffico catturato da tcpdump. Troveremo:

GET /restricted/ HTTP/1.1
Host: 192.168.101.12
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Sat, 02 Mar 2024 20:13:15 GMT
If-None-Match: "70-612b31f6ae088"
Authorization: Basic cGlwcG86cGx1dG8=

La coppia nome:password viene inviata nella testata della richiesta http come stringa non crittografata, ma solo trasformata con l'algoritmo Base64.

Uno sniffer può intercettare la richiesta http e uno hacker la può decodificare, p.es.:

echo "cGlwcG86cGx1dG8K=" | base64 -d
pippo:pluto

Autenticazione Digest

E' un metodo challenge-response.

Non occorre inviare la password, basta dimostrare di saperla.

Chresp

Scrivere il file di limitazione accessi nella directory riservata:

cd /var/www/localhost/htdocs/restricted
vi .htaccess
AuthType                Digest
AuthName                "club"
AuthDigestDomain        /restricted/ http://localhost/restricted/

AuthDigestProvider file
AuthUserFile /etc/apache2/secure   
 
<Limit GET>
require valid-user
</Limit>

Generare il file dei permessi:

cd /etc/apache2
htdigest -c secure club tizio
Adding password for user tizio in realm club.
New password:caio
Repeat password:caio

Nel file /etc/apache2/httpd.conf:

Togliere il commento alla linea

LoadModule auth_digest_module modules/mod_auth_digest.so

Restart del server corrente:

httpd -k restart

La cattura traffico è completamente differente:

GET /restricted/ HTTP/1.1
Host: 192.168.101.12
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Authorization: Digest username="tizio", realm="club", nonce="FBRN4bMSBgA=d74359083de5b800e832d25773dcbc555768d016", uri="/restricted/", algorithm=MD5, response="3a4fce5ee9163dd376b803e9cb4f8bbe", qop=auth, nc=00000001, cnonce="0e32602512c548ec"

La password non compare, nemmeno trascodificata.

Se vi sono errori, verificare il file di log /var/www/logs/error.log.