jueves, 5 de noviembre de 2009

Seguridad en php: validación y filtro (POST, GET) - parte 2

Temas a tratar:

  • expresiones regulares - v
  • switch ($parametro_entrada) - f

expresiones regulares - validación: son una cadena de caracteres que forman un patrón, con el fin de que sea comparada con otra cadena de caracteres y verificar si esta coincide o no con el patrón.


Por ejemplo:

si se desea validar un email debemos crear un patrón capaz de verificar que este sea válido. Para definir un patrón debemos entender y analizar lo que deseamos validar:

  • Un email inicia con caracteres como: a-z0-9_-.
  • seguido de un solo @ 
  • con un nombre de dominio con caracteres: a-z0-9-
  • y debe terminar con una extensión de dominio con caracteres como:  a-z.

Ya una vez entendido lo que deseamos validar podemos iniciar a crear nuestro patrón:

  • ^ : Debe presentarse al inicio de la cadena.
  • + : Se presenta 1 o mas veces.
  • * : Se presenta 0 o mas veces.
  • ? : Se presenta 0 o 1 vez.
  • $ : Debe presentarse al final de la cadena.
  • | : condicional or.
  • . : cualquier caracter.
  • [] : Agrupa los caracteres que deben de presentarse.
  • {} : define el número de veces que debe presentarse, {n}, {n,m}
  • \ : escape, sirve para que los caracteres especiales formen parte del patrón.
  • Un email inicia con caracteres como: ^[_a-z0-9-]+ y puede contener uno o mas puntos pero no al inicio ni al final: (\.[_a-z0-9-]+)*
  • seguido de un solo @: @ 
  • con un nombre de dominio con caracteres: [a-z0-9-]+
  • y debe terminar con una extensión del dominio con caracteres como:  (\.[a-z]{2,3}+)?(\.[a-z]{2,3})$ 

En resultado tenemos: 

$patron = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z]{2,3}+)?(\.[a-z]{2,3})$";

if(eregi($patron, "correo@electrónico.com")){

echo "correo válido";

} else {

echo "correo no válido";

}


switch ($parametro_entrada) - filtro: si tenemos una variable que recibimos por GET o por POST, como: pagina.php?var=mensaje uno, pagina.php?var=mensaje dos, etc.


$var = $_GET['var'];

echo $var;


lo mejor es utilizar identificadores para cada uno de los mensajes como los siguientes:  pagina.php?var=1,  pagina.php?var=2 y filtrar su valor con un switch case. Esto es debido a que si dejamos pagina.php?var=mensaje uno, cualquier usuario podría definir el mensaje al cambiar el valor en la url.


$var = $_GET['var'];

switch (initval($var)) {
  case 1:
     echo "mensaje uno";
     break; 
  case 2:
     echo "mensaje dos";
     break; 
  case 3:
     echo "mensaje tres";
     break;
  default:
     echo "no es un mensaje esperado";

}


No hay comentarios: