En mi caso, me he vuelto un tanto fan de usar LNMP como plataforma Web.
Y también como fan de la seguridad y dado el post anterior, aquí procedo a explicar cómo esconder la versió de nginx así como la existencia de PHP en un servidor web.
Para el primer caso, cuando intentamos entrar a un directorio inexistente, una página no permitida o un error de servidor, tenemos los típicos errores 404, 403 o 500 respectívamente:
Como vemos, se muestra la versión del servidor, lo cual puede ser útil para algún atacante, pues puede encontrar vulnerabilidades específicas para la versión en cuestión.
Para solucionar esto, debemos mirar en el archivo de configuración de nginx. Típicamente /etc/nginx/ngiinx.conf o /etc/nginx.conf.
Debemos agregar la siguiente linea en la seccion http:
server_tokens off;
Reiniciamos/recargamos el servidor web, y obtenemos lo siguiente:
Para el caso de PHP, existen por defecto algunos huevos de pascua, que propiamente no representan un compromiso de seguridad. Pero, dado que existen entornos empresariales muy estrictos en que es preferible mantener en secreto las plataformas que se utilizan, es preferible esconderlos.
Si nos vamos a cualquier servidor web con PHP, obtenemos esto colocando el parámetro adecuado en cualquier script:
- http://www.example.com/algunscript.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
Se muestran los créditos de PHP:
- http://www.example.com/algunscript.php?=?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
Se muestra una imagen que depende de la versión de PHP, por ejemplo alguna de estas (para PHP 5.3 y 5.2):
- http://www.example.com/algunscript.php?=?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
El logo de Zend Engine:
- http://www.example.com/algunscript.php?=?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
Otro logo de PHP:
Para desactivar el funcionamiento de estas URL especiales, lo que hay que hacer es modificar el archivo php.ini (en mi caso en la carpeta /etc/php5/cgi ) y buscar la línea:
expose_php = On
y reemplazarla por
expose_php = Off
Reiniciamos PHP (o Apache u otro servidor web si es el caso) y hemos terminado.
Finalmente, como decía respecto a plataformas empresariales, una medida adicional sería reemplazar las extensiones .php por alguna otra modificando los archivos de configuración del servidor web, de manera que no sea posible deducir que el servidor está corriendo bajo un entorno PHP.
En el caso de nginx, debemos cambiar una líneas en el vhost correspondiente, supongamos que queremos modificarlo para que utilice la extensión .tech en vez de .php:
de ser:
location ~ .*\.php$ {
...
}
pasa a ser esto:
location ~ .*\.tech|$ {
...
}
Y ahora podemos utilizar la extensión .tech en nuestra aplicación Web.