tag español attribute php header http-headers sanitization

español - PHP desinfecta los datos del usuario para usar en la función header()



title tag html (3)

¿Hay alguna rutina de escape que deba hacerse a los datos del usuario para que se utilicen dentro de la función de encabezado () de PHP?
Por ejemplo, para MySQL ejecuto mysql_real_escape_string () sobre los datos del usuario antes de enviarlo a la base de datos y para la salida en HTML ejecuto htmlspecialchars () ... ambos están envueltos en mi propia función personalizada para hacer otro procesamiento primero.

Pero para la función de encabezado () de PHP, ¿qué hay que hacer? ¿Hay algún personaje peligroso del que deba escapar?

Estoy intentando hacer algo como esto ... agregar la cadena de consulta a un encabezado () redirigir a una página diferente

if ( strlen($_SERVER[''QUERY_STRING'']) > 0) { $query_string = ''?''.$_SERVER[''QUERY_STRING'']; } header(''Location: http://domain.com/activate.php''.$query_string); exit();

¿Alguien ha recibido información sobre lo que debe escaparse para la función header ()? Los caracteres de dos puntos y dos puntos siempre parecen bastante críticos para las declaraciones de encabezado (). ¿Debo escapar de esos?


No, no hay nada que deba hacer para protegerse, siempre y cuando use PHP> = 4.4.2 (si está en PHP4) y> = 5.1.2 (si PHP5).

Consulte la documentación para el header() . Específicamente:

Esta función ahora evita que se envíen más de un encabezado a la vez como protección contra los ataques de inyección de encabezado.

Así que no hay una necesidad significativa de escapar de nada para un Encabezado de Ubicación . Si está en versiones anteriores, deberá escapar de todos los caracteres /r /n (para evitar la inyección del encabezado).

Además, no urlencode la cadena de consulta. Romperá el significado semántico de los datos que se envían. Sólo tienes que añadirlo en su totalidad.


Podría haber algunas vulnerabilidades usadas allí, como el envío de múltiples encabezados, a pesar del hecho de que si está ejecutando PHP5.1, esto se evita mediante PHP.

4.4.2 y 5.1.2: Esta función ahora evita que se envíen más de un encabezado a la vez como protección contra los ataques de inyección de encabezado.

Una parte de eso, si espera que se adjunte una cadena de consulta a ese archivo y no está utilizando las URL de SEO, debe validar la cadena de consulta con urlencode() que verificará si la cadena es una cadena de consulta o no y reemplazará caracteres extraños o caracteres no permitidos con % apropiado y + .

Referencias:


También puede usar http_build_query para convertir una matriz asociada en la cadena de consulta.

<?php $data = array(''foo''=>''bar'', ''baz''=>''boom'', ''cow''=>''milk'', ''php''=>''hypertext processor''); echo http_build_query($data) . "/n"; ?>

El ejemplo anterior dará como resultado:

foo=bar&baz=boom&cow=milk&php=hypertext+processor