Il file .htacces per la protezione del proprio sito

La protezione del proprio sito o blog da attacchi Hacker è un tema molto importante e complesso.
Purtroppo il numero di persone che hanno talmente poco da fare che rovinare il lavoro magari di mesi di altre persone è in continuo aumento.
Aumentano e si raffinano le tecniche di attacco dei siti ma fortumanamente aumentano anche le contromisure.
Oggi vediamo delle tecniche di base per la proteizone del nostro webserver da attacchi esterni che si basano sull’utilizzo del file .htacces.
Per poter utilizzare correttamente tutte le funzionalità seguenti dovete avere il vostro sito su di un hosting che permette l’accesso ai file salvati e al file “.htaccess” appunto.

Cos’è il file .htaccess

Htaccess è un semplice file di testo ASCII posto nella root del sito web ed è uno strumento molto potente di configurazione sul server web Apache.È possibile creare e modificare un file .htaccess utilizzando un editor di testo come Blocco note.

Iniziamo subito dicendo che bisogna fare molta attenzione quando si modifica il file .htaccess.
Il punto all’inizio del nomefile indica che sui server linux si tratta di un file nascosto e non a caso.
I file .htaccess vengono interpretati dal server web prima di richiamare la pagina richiesta dall’utente.
E’ possibile, quindi, controllare le richieste prima di trasferirle allo script lato server.
Quindi si tratta di un file di configurazione molto potente e un piccolo errore di sintassi può causare un malfunzionamento grave del server e rendere il sito inaccessibile.
Per evitare problemi quindi è sempre buona norma avere una copia di backup di tutti i file dal server prima di iniziare a lavorarci su.

Vediamo, dunque, alcuni esempi e funzioni per aumentare la sicurezza di un sito web


Creazione di una pagina di errore personalizzata

Serve per redirigere i visitatori su una pagina personalizzata nel caso in cui il server web restituisca un errore (ad esempio il noto errore 404 per le pagine inesistenti).
In questo modo l’utente non vede l’indirizzo reale delle pagine di errore, perchè rimane sull’indirizzo che aveva cercato.
Tramite .htacces si può impostare (e quindi controllare) una pagina di errore per ogni tipo di errore.

	ErrorDocument 401 /error/401.php
	ErrorDocument 403 /error/403.php
	ErrorDocument 404 /error/404.php
	ErrorDocument 500 /error/500.php

Proteggere con password le directory e file

È possibile impostare l’autenticazione per alcuni file e directory
Di seguito il codice oer la protezione per un singolo file e la protezione con password per un intera directory.

    # Per proteggere un file
    <files Secure.php>
    AuthType Basic
    AuthName “Prompt”
    AuthUserFile / home / path / .htpasswd
    Require valid-user
 
 
    # Proteggere con password una cartella
    risiede
    AuthType Basic
    AuthName “Questa directory è protetto”
    AuthUserFile / home / path / .htpasswd
    AuthGroupFile / dev / null
    Require valid-user
</files>

Per consentire l’accesso a zone riservate del sito previo inserimento di un nome utente e una password si deve modificare anche il file .htpasswd che deve essere così costruito

utente:password

Bloccare User Agent indesiderati

L’User Agent è in breve il mezzo tramite cui si visualizza il sito web.
Può essere un software di navigazione (il browser), client per funzioni varie, ma anche uno script ad esempio Java o Javascript o altro.
I nostri siti subiscono la visita di user agent che servono agli scopi più disparati.
Ci sono quelli buoni, che indicizzano le nostre pagine per i motori di ricerca, e quelli meno buoni, che causano solo inutile traffico o peggio ancora sono utilizzati per raccogliere indirizzi e-mail ed effettuare spamming.
Tramite .htaccess è possibile bloccare le richieste basate su un preciso User Agent.

	<ifmodule mod_rewrite.c>
	SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
	SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
	Deny from env=HTTP_SAFE_BADBOT
	</ifmodule>

Altri tipi di blocco che si possono fare sono su determinati url o determinati indirizzi IP.

Bloccare determinati Modelli Url

Per prevenire alcune tecniche comuni di hacking individuando modelli di URL maligni.

RewriteEngine On
 
# proc/self/environ? no!
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
 
#Blocca ogni script che cerca di settare un valore mosConfig attraverso l'URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
 
# Blocca ogni script base64_encode crap
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
 
#Blocca ogni script che contiene un tag <script> nell'URL
RewriteCond %{QUERY_STRING} (< |%3C).*script.*(>|%3E) [NC,OR]
 
# Blocca ogni script che cerca di settare una variabile globale PHP via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
 
# Blocca ogni script che cerca di modificare una variabile a _REQUEST via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
 
# Invia tutte le richieste bloccate alla pagina di errore 403!
RewriteRule ^(.*)$ index.php [F,L]
</script>


Blocco di indirizzi IP

Su internet si trovano facilmente liste di indirizzi IP associati a spammer.
Noi possiamo aggiornare e convertire queste liste in una regola sul .htaccess che blocca l’accesso al sito da parte di tali IP.

La sintassi è la seguente:

ORDER allow,deny
deny FROM 123.45.6.7 - 123.45.6.9
allow FROM ALL

Se qualcuno tenta di accedere al sito da un IP tra qualli bloccati, otterrà un errore 403.

Blocco di visitatori indesiderati sulla base del dominio di provenienza

Nel caso in cui si ricevano attacchi da qualche sito specifico, può essere utile bloccare gli accessi diretti da quel dominio. Per impedire l’accesso, viene utilizzata una regola impostata sulla base dell’HTTP referrer

<ifmodule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]
 RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]
 RewriteRule .* - [F]
</ifmodule>

Disabilitare directory browsing

Quando Apache non trova un file index relativo alla risorsa richiesta tramite URL (cioè quando non viene specificato il nome di un file all’interno di un percorso, es. www.sito.it/cartella/), può eseguire un Directory listing, cioè mostrare il contenuto della cartella.

Nel file di configurazione di Apache (httpd.conf), è possibile abilitare o disabilitare questa caratteristica, semplicemente modificando il modulo mod_autoindex.

Volendo utilizzare il file .htaccess possiamo inserire le seguienti righe :

# Per disabilitare il directory browsing
Options All -Indexes
 
# Per abilitare  directory browsing
Options All +Indexes


Parsing delle richieste

Ora entriamo nell’analisi del contenuto delle richieste.
Si sfruttano le espressioni regolari per prevenire alcune hotkey, come ad esempio script, ma in modo che non intralcino con il corretto funzionamento del sito.

Allo scopo si utilizzano le RewriteCond, ovvero regole che permettono fare determinate operazioni se arriva al server una determinata richiesta.

Un esempio è il seguente:

#Blocca le richeiste che hanno all'interno il tag <script> nell URL
RewriteCond %{QUERY_STRING} (\< |%3C).*script.*(\>|%3E) [NC,OR]
</script>

Possiamo anche intercettare caratteri in base64:

# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]

Dopo le RewriteCond, dobbiamo inserire una regola RewriteRule che blocchi e trasferisca la richiesta verso uno speciale script per avvisare l’utente del problema.

L’esempio finale diventa:

# Block out any script that includes a < script> tag in URL
RewriteCond %{QUERY_STRING} (\< |%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteRule ^(.*)$ /blocca_attacco.php [F,L]



About Mauro De Filippis 1012 Articles
Laureato in Ingegneria Informatica nel 2008 presso l'Università degli Studi di Lecce con una tesi in Processi di Produzione Robotizzati dal titolo "Integrazione delle tecniche di progettazione del ciclo di lavorazione con programmazione della produzione”. Le mie attività principali sono : sviluppo di applicativi ANSI C per terminali POS basati su processori ARM Risc 32Bit con 2-4 MB di Ram (progettazione, sviluppo e test delle applicazioni ) sviluppo in ambiente .NET sviluppo Web in ambiente PHP, ASP Installazione, progettazione, utilizzo di Db MS SQL Server, Mysql, Acces , Oracle Da anni mi occupo di CMS Open Source, in particolare di Joomla e Wordpress. Mia è la Guida Wordpress 3.5, la Guida Joomla 2.5 , il Corso online Joomla! 2.5 ed il Corso online Wordpress Mi occupo anche di LMS in particolare di Moodle e Docebo. Google+ by Mauro De Filippis

1 Comment

  1. sarebbe possibile attraverso .htaccess e .htpasswd ottenere l ip del visitatore e l’oraio della visita salvati in un terzo file?

1 Trackback / Pingback

  1.   Htacces Tool per modificare velocemente il file .htaccess by modifycando.com

Rispondi