Ori de câte ori vizitezi o pagină internet, browserul tău trimite serverului în cererile HTTP și informații de identificare, iar la rândul lui, serverul răspunde cu anumite detalii. Problema e că serverul web trimite în mod implicit mai multe detalii decât e nevoie pentru funcționare.
Iată un exemplu de răspuns:
# curl -I http://xxx.xxxxxxx.xx HTTP/1.1 301 Moved Permanently Date: Wed, 08 Jan 2014 18:27:24 GMT Server: Apache/2.2.24 (Unix) mod_ssl/2.2.24 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 X-Powered-By: PHP/5.2.17 Location: http://xxxxxxx.xx/ Connection: close Content-Type: text/html
Aflăm imediat că pagina web vizitată rulează pe un server Apache învechit (versiunea 2.2 este de-„legacy”) și cu potențiale probleme de securitate, devreme de ultima versuine din ramura „legacy” este 2.2.26. Mai mult, versiunea PHP folosită – 5.2.17 – este una foarte veche.
Un hacker poate folosi aceste informații alături de altele) pentru a-și pregăti un atac de succes asupra site-ului, folosind exact exploit-urile disponibile pentru versiunile găsite.
În anumite situații (un exemplu este certificarea PCI) preferăm să nu divulgăm aceste versiuni. Iată cum puteți ascunde informațiile de identificare:
Apache
Serverul Apache are două directive de configurare: ServerSignature și respectiv ServerTokens.
Directiva ServerSignature este responsabilă pentru informațiile ce apar la finalul documentelor „server-generated” (ex. paginile 404 sau index-urile de fișiere). De obicei apar informații despre serverul web și adresa de email a webmaster-ului
Directiva ServerTokens este responsabilă pentru informațiile explicite despre server. În funcție de valoarea sa, următoarele informații sunt afișate.
Setare | Răspuns trimis |
---|---|
ServerTokens Prod[uctOnly] | Server: Apache |
ServerTokens Major | Server: Apache/2 |
ServerTokens Minor | Server: Apache/2.2 |
ServerTokens Min[imal] | Server: Apache/2.2.24 |
ServerTokens OS | Server: Apache/2.2.24 (Unix) |
ServerTokens Full | Server: Server: Apache/2.2.24 (Unix) mod_ssl/2.2.24 …. |
Pentru a limita total informațiile servite pe baza acestor directive, modificați fișierul de configurare /etc/httpd/conf/httpd.conf
:
# vi /etc/httpd/conf/httpd.conf
Căutați cele două directive și modificați-le; dacă nu există, adăugați-le la finalul fișierului:
ServerSignature Off ServerTokens Prod
Salvați fișierul și restartați serverul Apache:
# service httpd restart
PHP
Pentru a bloca afișarea informațiilor despre PHP, editați fișierul /etc/php.ini
# vi /etc/php.ini
Căutați directiva și modificați-o ca mai jos; dacă nu există, adăugați-o la finalul fișierului:
expose_php = Off
Salvați fișierul și restartați serverul Apache:
# service httpd restart
Asta e tot!
Acum, informațiile publicate vor fi mult mai criptice. De exemplu, în cazul de mai sus, datele ar arăta așa:
# curl -I http://xxx.xxxxxxx.xx HTTP/1.1 301 Moved Permanently Date: Wed, 08 Jan 2014 18:27:24 GMT Server: Apache Location: http://xxxxxxx.xx/ Connection: close Content-Type: text/html
Bonus: nginx
Pentru serverul nginx, setarea ce trebuie urmărită este server_tokens
: Aceasta poate fi adăugată în oricare din secțiunile http, server, sau location.Trebuie doar s-o setați pe off, în fișierul /etc/nginx/nginx.conf
, ca mai jos:
server_tokens off;
Apoi restartați serverul cu comanda service nginx restart
și gata.