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