Funciones para comprobar y filtrar datos

Para comprobar y filtrar datos utilizaremos las funciones que vimos en el apartado de Programación segura - Filtrado de datos. En primer lugar vamos a eliminar todos los espacios en blanco que pudiera haber introducido el usuario de manera involuntaria al principio o al final del término de búsqueda.

Normalmente usaremos funciones para eliminar espacios en blanco de la cadena introducida delante y detrás.

trim() : eliminar espacios en blanco delante y detrás

Otras funciones que vimos en sesiones anteriores que se utilizaban para comprobar caracteres de control:

addslahes(): añade barras invertidas a caracteres especiales
stripslahes(): elimina las barras invertidas introducidas para escapar caracteres especiales

A partir de la versión 5 de PHP se incluyó una nueva funcionalidad que pretendía ayudar al programador y liberarlo de filtrar aquellos datos que provienen de fuentes externas (GET, POST y COOKIE). Esta funcionalidad se llamó **Magic Quotes** (comillas mágicas) y se encargaba de añadir automáticamente _slashes_ (barras invertidas) a los siguientes caracteres especiales: comilla sencilla ('), ), barra invertida ( \ ) y el carácter NULL a todo parámetro enviado vía GET, POST o a los que se guardan en cookies. No era el mejor nombre para esa funcionalidad, ya que no hay nada de mágico en ello. Tan sólo se trata de un "Escapado automático de caracteres especiales".

El objetivo inicial de esta funcionalidad era que el desarrollador pudiera utilizar directamente los datos y pasarlos por ejemplo a una consulta SQL, sin tener que hacer un addslashes previamente. Sin embargo, lo que de a primeras podía parecer una buena idea, acarreó muchos problemas de portabilidad al tener nuestra aplicación realizada con una configuración propia. Al desplegar la aplicación en un servidor externo ocasionaba brechas de seguridad (Inyección SQL) ya que la configuración no era similar o el escapado de caracteres no funcionaba del todo correctamente para otras librerías de conexión a base de datos que no fuera MySQL, Oracle por ejemplo. Los propios desarrolladores de PHP recomiendan desactivar esta funcionalidad ya que a partir de la versión 5.4.0 desaparecerá por completo.

Ya hemos hablado de dos funciones que escapan y "desescapan" cadenas como son addslashes() y stripslahes(). Si hemos escrito nuestro script en una máquina con **Magic Quotes** deshabilitadas, lo lógico es que escapemos nosotros mismos las variables con addslashes.

Ese mismo código en un servidor con Magic Quotes activado nos daría este resultado:

$_POST['autor'] = "O\'Really";
echo addslashes($_POST['autor']); //escribiria "O\\\'Really".

Por otra parte, si no hubiésemos utilizado addslashes() confiando en Magic Quotes, en un servidor sin este mecanismo nos permitiría hacer un INSERT en una base de datos sin escapar las comillas, lo que normalmente causaría error, o algo mucho peor como una inyección SQL.

En primer lugar debemos deshabilitar esta característica en la configuración de PHP editando el fichero **php.ini** colocando al Off la directiva **magic_quotes_gpc** (gpc = GET, POST y COOKIE).

Será así:

magic_quotes_gpc = Off

En segundo lugar escribiremos una función para recoger las variables de formulario y las escape en caso necesario. Para detectar el estado de la configuración de Magic Quotes utilizaremos la función get_magic_quotes_gpc().

Un ejemplo podría ser:

function getFormVars($request_vars)
{
   $form_vars = array();
   while (list($key, $value) = each($request_vars)){
      if (!get_magic_quotes_gpc()){
         $var_text = addslashes($value);
      }else {
         $var_text = $value;
      }
      $form_vars[$key] = $var_text;
   }
   return $form_vars;
}

A esta función le pasaremos como argumento $_POST, $_GET, $COOKIE o $_REQUEST y devolverá una matriz asociativa con las variables escapadas convenientemente.

results matching ""

    No results matching ""