Tengo un entorno node.js implementado utilizando AWS Elastic Beanstalk en un servidor Apache. He ejecutado un escaneo PCI en el entorno y tengo 2 fallas:
- Divulgación de información de Apache ServerTokens
- Divulgación de información del encabezado HTTP del servidor web
Naturalmente, estoy pensando que necesito actualizar el archivo httpd.conf con lo siguiente:
ServerSignature Off
ServerTokens Prod
Sin embargo, dada la naturaleza de Elastic Beanstalk y Elastic Load Balancers, tan pronto como el entorno se incremente, agregue nuevos servidores, reinicie, etc., la configuración se sobrescribirá.
También he intentado colocar lo siguiente en un archivo .htaccess:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
# Security hardening for PCI
Options -Indexes
ServerSignature Off
# Dissallow iFrame usage outside of loylap.com for PCI Security Scan
Header set X-Frame-Options SAMEORIGIN
En el lado del nodo js, uso el paquete "casco" para aplicar algunas medidas de seguridad, también uso el paquete "express-force-https" para garantizar que la aplicación está aplicando https. Sin embargo, parece que estos solo surten efecto después de que se inicie la aplicación Express y después de la redirección.
Tengo escuchas de Elastic Load Balancer configuradas para HTTP (puerto 80) y HTTPS (puerto 443), sin embargo, las solicitudes HTTP se enrutan inmediatamente a HTTPS.
Cuando ejecuto el siguiente comando de curl:
curl -I https://myenvironment.com --head
Recibo una respuesta aceptable con la siguiente línea:
Server: Apache
Sin embargo, cuando ejecuto la misma solicitud en el punto final de http (es decir, antes de redireccionar, etc.):
curl -I http://myenvironment.com --head
Recibo una respuesta que revela más información sobre mi servidor de la que debería, y por lo tanto, la falla de PCI:
Server: Apache/2.4.34 (Amazon)
¿Cómo puedo forzar a mi entorno a restringir la respuesta del encabezado http en HTTP así como en HTTPS?