UX & Coding

Bloccare bot e visite indesiderate al sito con .htaccess

"I siti web vengono costantemente colpiti da visite indesiderate e bot malevoli che tentano di ottenere l'accesso tramite alcuni espedienti: una accurata configurazione del server può limitare questi attacchi"

Qualsiasi tipo di sito, una volta pubblicato, è accessibile da qualunque area del pianeta e molto spesso è soggetto a continui tentativi di attacco.

Essi mirano ad impossessarsi delle credenziali di accesso (nel caso ad esempio di siti WordPress) o a pubblicare pagine con contenuti pubblicitari indesiderati.

Questi attacchi sono “silenziosi” dato che fino a quando non riescono effettivamente a prendere il controllo del sito non causano visibili disagi, ma le ripetute chiamate al server che generano possono impegnare un quantitativo di risorse notevole che viene sottratto agli utenti reali.

Le richieste indesiderate possono arrivare anche a decina di migliaia al giorno in quanto sono gestisce da spam bot, ovvero computer accessi incessantemente che tentano di penetrare qualsiasi tipo di sito.

Come difendersi dagli attacchi

Sfruttando il file .htaccess è possibile ottenere un’ottima protezione per qualsiasi sito che utilizzata Apache (come tipicamente i siti basati su WordPress).

Questo file permette di richiamare un set di istruzioni che eseguono la scansione di ogni singola richiesta HTTP inviata al sito, confrontare gli aspetti chiave di ciascuna chiamata attraverso un insieme di regole ed espressioni e se qualcosa innesca una corrispondenza bloccare le richieste immediatamente.

Se il file viene correttamente utilizzato le richieste verranno direttamente respinte e quindi il server limiterà sensibilmente la dispersione di risorse.

Sicurezza pronta all’uso con 6G Firewall

Questo tipo di firewall è stato elaborato negli anni da Jeff Starr), uno sviluppatore web, autore e insegnante specializzato in sicurezza.

Il codice, frutto di anni di test e messe a punto, è pronto all’utilizzo e va riportato all’interno del file .htaccess:

# 6G FIREWALL/BLACKLIST
# @ https://perishablepress.com/6g/

# 6G:[QUERY STRINGS]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR]
RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC]
RewriteRule .* - [F]
</IfModule>

# 6G:[REQUEST METHOD]
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} ^(connect|debug|move|put|trace|track) [NC]
RewriteRule .* - [F]
</IfModule>

# 6G:[REFERRERS]
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000,}) [NC,OR]
RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC]
RewriteRule .* - [F]
</IfModule>

# 6G:[REQUEST STRINGS]
<IfModule mod_alias.c>
RedirectMatch 403 (?i)([a-z0-9]{2000,})
RedirectMatch 403 (?i)(https?|ftp|php):/
RedirectMatch 403 (?i)(base64_encode)(.*)(\()
RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\.
RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&amp;?)/?$
RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\")
RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\{|\}|\[|\]|\|)
RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|muieblack)
RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ)
RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$
RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php
</IfModule>

# 6G:[USER AGENTS]
<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent ([a-z0-9]{2000,}) bad_bot
SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot

# Apache < 2.3
<IfModule !mod_authz_core.c>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</IfModule>

# Apache >= 2.3
<IfModule mod_authz_core.c>
<RequireAll>
Require all Granted
Require not env bad_bot
</RequireAll>
</IfModule>
</IfModule>

# 6G:[BAD IPS]
<Limit GET HEAD OPTIONS POST PUT>
Order Allow,Deny
Allow from All
# uncomment/edit/repeat next line to block IPs
# Deny from 123.456.789
</Limit>

L’unica parte di questo firewall che opzionalmente deve essere gestita è il blocco degli IP che può tornare utile in presenza di specifici indirizzi IP (riconoscibili ad esempio dai log server) che continuano ed effettuare richieste indesiderate.

Ad esempio per bloccare gli IP 1.2.3.4 e 5.6.7.8 l’ultima parte delle regole va modificata in questo modo:

# 6G:[BAD IPS]
<Limit GET HEAD OPTIONS POST PUT>
Order Allow,Deny
Allow from All
Deny from 1.2.3.4
Deny from 5.6.7.8
</Limit>

Bloccare gli user-agent con il file robots.txt

Nel caso in cui le visite indesiderate provengano da motori di ricerca che non sono di interesse per il proprio target o il proprio business è possibile agire sul file robots.txt che permette di limitare la scansione del sito o di alcune specifiche aree da parte dei crawler.

Questo semplice file di testo basa il suo funzionamento su due parametri di controllo molto basilari:

  • User-agent indica il nome con cui ogni crawler web si presenta al web server (ad esempio per Google corrisponde a Googlebot)
  • Disallow serve a specificare quale cartella o contenuto non deve essere indicizzato e quindi raggiunto dal motore di ricerca (ad esempio “/” nega l’accesso a tutto il sito)

Nell’esempio seguente è rappresentato un elenco di regole che non permette l’accesso all’intero sito da parte di diversi motori di ricerca esterni all’Europa.

# MOTORI DI RICERCA GIAPPONESI
User-agent: moget
User-agent: ichiro
Disallow: /

# MOTORI DI RICERCA COREANI
User-agent: NaverBot
User-agent: Yeti
Disallow: /

# MOTORI DI RICERCA CINESI
User-agent: Baiduspider
User-agent: Baiduspider-video
User-agent: Baiduspider-image
User-agent: sogou spider
User-agent: YoudaoBot
Disallow: /

# MOTORI DI RICERCA RUSSI
User-agent: Yandex
Disallow: /

Questo metodo non è un’alternativa all’utilizzo del file .htaccess dato che ha un approccio completamente diverso dal primo: risponde infatti ad un esigenza differente che ha il presupposto di limitare il raggiungimento dei contenuti da determinati motori di ricerca.

in questo caso viene “suggerito” al motore di ricerca di non accedere al sito ma il crawler sarà comunque in grado di valutare la richiesta ed effettuare lo scaricamento della risorse raggiungendo a tutti gli effetti il server.

Unisciti alla community! Rimani aggiornato, scopri le migliori guide e ricevi risorse gratuite.



1 commento

UX & Coding

Articoli recenti

Newsletter

Inserisci la tua email per restare aggiornato sulle ultime novità.