¿Es segura esta generación de URL del proyecto?

1

En los procedimientos de respuesta de mi pregunta encontré una forma de generar una URL de proyecto independientemente de la ruta del proyecto en la raíz del documento.

Si en un archivo en la raíz del proyecto, defino lo siguiente:

define(PROJECT_URL,
       '//'.$_SERVER['HTTP_HOST'].
       substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']))
);

Obtengo una URL estática que es útil y funcionará si muevo el proyecto a otra parte.

Sin embargo, como soy bastante novato con los servidores web y las aplicaciones, me pregunto si este enfoque tiene alguna vulnerabilidad de seguridad explotable.

    
pregunta Mini Fridge 25.10.2016 - 18:37
fuente

1 respuesta

1

Por la documentación , $_SERVER['HTTP_HOST'] se completa según el Host encabezado enviado por el cliente. Probablemente debería comenzar a preocuparse en este punto, ya que nunca es una buena idea confiar en los datos que puede proporcionar un cliente malintencionado.

También hay SERVER_NAME , que proporciona un resultado similar pero ligeramente diferente. Puede encontrar una buena discusión acerca de estos dos y las formas apropiadas de usarlos en esta pregunta sobre el desbordamiento de pila .

Ahora, ¿qué ataques podría realizar alguien mediante la manipulación de su nombre de host? Eso depende de tu aplicación. Tal vez esté guardando en caché una página renderizada y sirviéndola a otro usuario, y esa página se generó con Host: mymaliciousserver.com , por lo que ahora su segundo usuario está haciendo clic en los enlaces al servidor del atacante, donde falsifican los detalles de la cuenta. Existe una gran cantidad de posibles vulnerabilidades y, en lugar de intentar solucionarlos todos, prefiero evitar el problema por completo.

De todos modos, también es un código algo cuestionable: agrega mucha complejidad para algo que no cambia a menudo. Si se trata de su propia aplicación personalizada, simplemente configure el nombre de host una vez y termine con él; si es una aplicación distribuible, haga que el cliente establezca el nombre de host una vez y que termine con él. Está agregando partes móviles y mágicas, y tienden a tener problemas de seguridad, así como a funcionar mal en entornos para los que no ha diseñado explícitamente (por ejemplo, sitios detrás de un proxy inverso, sitios alojados en un puerto no estándar, sitios que se ejecutan en un entorno de sitios múltiples, etc.).

    
respondido por el Xiong Chiamiov 25.10.2016 - 22:54
fuente

Lea otras preguntas en las etiquetas